如何在嵌套字典中的字符串化键内使用变量?

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 请求。