如何在嵌套字典中的字符串化键内使用变量?
How do I use variables inside a stringified key in a nested dict?
我有一个默认消息正文,用于作为 post 请求发送。
以下是我的消息正文:-
msg_body = {
"deviceId": "36330586",
"Command": {
"text": "{\"2\":{\"21\":\"agenda\",\"22\":\"Serial\",\"31\":\"On\",\"32\":\"On\",\"33\":\"Off\",\"34\":\"Off\",\"41\":\"127\",\"51\":\"0:21\",\"61\":\"5:21\",\"71\":\"10\",\"81\":\"10\",\"91\":\"0\",\"101\":\"0\",\"111\":\"false\"}}"
},
"description": "Execute command 2"
}
我正在调用 api 来获取我需要使用 text
中的变量传递的值。
例如 text
包含键 21 22 31 32
等等....我想为 text
中的每个值使用变量,以便我可以传递从api。
因此,例如:
\"21\":\"agenda\",\"22\":\"Serial\",\"31\":\"On\"....
我想使用变量模式而不是议程,对于串行我想使用变量serial_val传递值等等...
此消息正文将用于发出 post 请求:
r2 = requests.post(url, data=json.dumps(msg_body), headers=headers)
您可以使用 python 内置 json
模块来序列化和反序列化 json 对象。您的示例是一个带有序列化嵌套 text
键的字典,您可以将其反序列化并转换为 json 对象。
首先我们反序列化文本部分,因为这对您来说似乎是最重要的部分
import json
msg_body = {
"deviceId": "36330586",
"Command": {
"text": "{\"2\":{\"21\":\"agenda\",\"22\":\"Serial\",\"31\":\"On\",\"32\":\"On\",\"33\":\"Off\",\"34\":\"Off\",\"41\":\"127\",\"51\":\"0:21\",\"61\":\"5:21\",\"71\":\"10\",\"81\":\"10\",\"91\":\"0\",\"101\":\"0\",\"111\":\"false\"}}"
},
"description": "Execute command 2"
}
text_obj = json.loads(msg_body["Command"]["text"])
然后我们像您提到的那样更新值
text_obj["2"]["22"] = "serial_val" # was "Serial" before
text_obj["2"][<other_key>] = <other value>
然后我们序列化 text_obj
并更新 msg_body
中的值
msg_body["Command"]["text"] = json.dumps(text_obj)
print(msg_body)
现在您可以使用 msg_body
和更新后的值来发出 Web 请求。
我有一个默认消息正文,用于作为 post 请求发送。 以下是我的消息正文:-
msg_body = {
"deviceId": "36330586",
"Command": {
"text": "{\"2\":{\"21\":\"agenda\",\"22\":\"Serial\",\"31\":\"On\",\"32\":\"On\",\"33\":\"Off\",\"34\":\"Off\",\"41\":\"127\",\"51\":\"0:21\",\"61\":\"5:21\",\"71\":\"10\",\"81\":\"10\",\"91\":\"0\",\"101\":\"0\",\"111\":\"false\"}}"
},
"description": "Execute command 2"
}
我正在调用 api 来获取我需要使用 text
中的变量传递的值。
例如 text
包含键 21 22 31 32
等等....我想为 text
中的每个值使用变量,以便我可以传递从api。
因此,例如:
\"21\":\"agenda\",\"22\":\"Serial\",\"31\":\"On\"....
我想使用变量模式而不是议程,对于串行我想使用变量serial_val传递值等等...
此消息正文将用于发出 post 请求:
r2 = requests.post(url, data=json.dumps(msg_body), headers=headers)
您可以使用 python 内置 json
模块来序列化和反序列化 json 对象。您的示例是一个带有序列化嵌套 text
键的字典,您可以将其反序列化并转换为 json 对象。
首先我们反序列化文本部分,因为这对您来说似乎是最重要的部分
import json
msg_body = {
"deviceId": "36330586",
"Command": {
"text": "{\"2\":{\"21\":\"agenda\",\"22\":\"Serial\",\"31\":\"On\",\"32\":\"On\",\"33\":\"Off\",\"34\":\"Off\",\"41\":\"127\",\"51\":\"0:21\",\"61\":\"5:21\",\"71\":\"10\",\"81\":\"10\",\"91\":\"0\",\"101\":\"0\",\"111\":\"false\"}}"
},
"description": "Execute command 2"
}
text_obj = json.loads(msg_body["Command"]["text"])
然后我们像您提到的那样更新值
text_obj["2"]["22"] = "serial_val" # was "Serial" before
text_obj["2"][<other_key>] = <other value>
然后我们序列化 text_obj
并更新 msg_body
msg_body["Command"]["text"] = json.dumps(text_obj)
print(msg_body)
现在您可以使用 msg_body
和更新后的值来发出 Web 请求。