将Python字符串传递到JSON有效负载

时间:2018-11-03 21:58:42

标签: python json variables payload

我的代码中有这个

targetTemp = 17
...
payload = "{\n    \"nodes\": [{\n        \"attributes\": {\n            \"targetHeatTemperature\": {\n                \"targetValue\": '+ targetTemp +',\n            }\n        }\n    }]\n}"

我尝试了一些在网上找到的内容,但似乎没有任何效果。如果我将'+ targetTemp +'替换为18,那么它将满足我的要求。

我只用单引号和没有加号的变量,只是变量名,最后没有逗号。真的,我只是在黑暗中跌跌撞撞。

4 个答案:

答案 0 :(得分:2)

最外面的双引号内的

'+ targetTemp +'不执行字符串连接。从字面上看,是在输入文字。

您应该使用"+ targetTemp +"

但是,构建实际的字典并使用json.dumps不太容易出错

答案 1 :(得分:2)

字符串不起作用的原因是因为您对字符串使用了双引号/dev/urandom而不是单引号"。由于json格式需要双引号,因此您仅应在字符串本身内部使用双引号,然后使用单引号表示字符串的开始/结束。 (这样一来,您无需不必要地继续使用这些'
另外,\"可以帮助将变量放入字符串中,使它们更容易。

这应该修复您的json字符串:

.format()

但是,使用targetTemp = 17 payload = '{\n "nodes": [{\n "attributes": {\n "targetHeatTemperature": {\n "targetValue": {},\n }\n }\n }]\n}'.format(targetTemp) 模块使事情变得容易得多,因为它允许您传入可从json字符串转换为json字符串的python字典。

使用json包的示例:

json

答案 2 :(得分:2)

您的payload非常复杂,您无需将其用引号引起来,因为它可以被视为dict,而且您的targetTemp也被视为字符串this这就是为什么您看不到实际值的原因。

为简单起见,您可能需要研究Python string formatting

这会做你想要的,

import json

targetTemp = 17
payload = {
    "nodes": [{
        "attributes": {
            "targetHeatTemperature": {
                "targetValue": targetTemp
            }
        }
    }]
}

print(json.dumps(payload))

# output,
{"nodes": [{"attributes": {"targetHeatTemperature": {"targetValue": 17}}}]}

请注意,您还可以使用JSON Validators来确保您的json对象的格式正确。(这就是我用来格式化提供的JSON的格式)

答案 3 :(得分:1)

我们将代码缩短一点。

payload = "{...\"targetValue\": '+ targetTemp +'...}"

现在看到问题了吗? payload用双引号分隔,因此,要退出,追加和“重新输入”字符串,您需要使用双引号而不是单引号:

payload = "{...\"targetValue\": "+ targetTemp +"...}"

或者,更为健壮和乏味的解决方案是将payload构建为包含dict作为常规值的Python结构的targetTemp,然后 then < / em>之后,用json.dumps对其进行序列化:

payload_obj = {
    "nodes": [{
         "attributes": {
             "targetHeatTemperature": {
                 "targetValue": targetTemp,
             }
         }
    }]
}

payload = json.dumps(payload_obj)