将 Python 字符串传递到 JSON 负载中
Passing a Python string into JSON payload
我的代码中有这个:
targetTemp = 17
...
payload = "{\n \"nodes\": [{\n \"attributes\": {\n \"targetHeatTemperature\": {\n \"targetValue\": '+ targetTemp +',\n }\n }\n }]\n}"
我已经尝试了一些我在网上找到的方法,但似乎没有任何效果。如果我将“+ targetTemp +”替换为 18,那么它就可以满足我的要求。
我试过只用单引号,没有加号,只有变量名,末尾没有逗号。我只是在黑暗中跌跌撞撞,真的。
'+ targetTemp +'
最外面的双引号内没有进行字符串连接。它实际上是在放置该文本。
你应该使用 "+ targetTemp +"
然而,构建一个实际的字典,并使用 json.dumps
会更不容易出错
您的字符串不起作用的原因是您对字符串使用了双引号 "
而不是单引号 '
。由于 json 格式需要双引号,您只应在字符串本身内使用双引号,然后使用单引号表示字符串的 start/end。 (这样你就不需要继续使用那些 \"
不必要的。
此外,.format()
可以帮助将变量放入字符串中,使它们更容易。
这应该可以修复您的 json 字符串:
targetTemp = 17
payload = '{\n "nodes": [{\n "attributes": {\n "targetHeatTemperature": {\n "targetValue": {},\n }\n }\n }]\n}'.format(targetTemp)
然而,使用 json
模块使事情变得容易得多,因为它允许您传入一个 python 字典,该字典可以转换为 from/to 一个 json 字符串.
使用 json
包的示例:
import json
targetTemp = 17
payload = {
"nodes": [{
"attributes": {
"targetHeatTemperature": {
"targetValue": targetTemp
}
}
}]
}
payload_json = json.dumps(payload) # Convert dict to json string
您的 payload
非常复杂,您无需将其括在引号中,因为它可以被视为 dict
,您的 targetTemp
也被视为string 这就是为什么您看不到实际值的原因。
为简单起见,您可能需要查看 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
的格式)
让我们把代码缩短一点。
payload = "{...\"targetValue\": '+ targetTemp +'...}"
现在看到问题了吗? payload
是用双引号分隔的,所以为了退出、追加和 "re-enter" 字符串,需要使用双引号而不是单引号:
payload = "{...\"targetValue\": "+ targetTemp +"...}"
或者,更稳健且更简单的解决方案是将 payload
构建为包含 targetTemp
作为正常值的 Python 结构的 dict
,然后 then 用 json.dumps
:
序列化它
payload_obj = {
"nodes": [{
"attributes": {
"targetHeatTemperature": {
"targetValue": targetTemp,
}
}
}]
}
payload = json.dumps(payload_obj)
我的代码中有这个:
targetTemp = 17
...
payload = "{\n \"nodes\": [{\n \"attributes\": {\n \"targetHeatTemperature\": {\n \"targetValue\": '+ targetTemp +',\n }\n }\n }]\n}"
我已经尝试了一些我在网上找到的方法,但似乎没有任何效果。如果我将“+ targetTemp +”替换为 18,那么它就可以满足我的要求。
我试过只用单引号,没有加号,只有变量名,末尾没有逗号。我只是在黑暗中跌跌撞撞,真的。
'+ targetTemp +'
最外面的双引号内没有进行字符串连接。它实际上是在放置该文本。
你应该使用 "+ targetTemp +"
然而,构建一个实际的字典,并使用 json.dumps
会更不容易出错
您的字符串不起作用的原因是您对字符串使用了双引号 "
而不是单引号 '
。由于 json 格式需要双引号,您只应在字符串本身内使用双引号,然后使用单引号表示字符串的 start/end。 (这样你就不需要继续使用那些 \"
不必要的。
此外,.format()
可以帮助将变量放入字符串中,使它们更容易。
这应该可以修复您的 json 字符串:
targetTemp = 17
payload = '{\n "nodes": [{\n "attributes": {\n "targetHeatTemperature": {\n "targetValue": {},\n }\n }\n }]\n}'.format(targetTemp)
然而,使用 json
模块使事情变得容易得多,因为它允许您传入一个 python 字典,该字典可以转换为 from/to 一个 json 字符串.
使用 json
包的示例:
import json
targetTemp = 17
payload = {
"nodes": [{
"attributes": {
"targetHeatTemperature": {
"targetValue": targetTemp
}
}
}]
}
payload_json = json.dumps(payload) # Convert dict to json string
您的 payload
非常复杂,您无需将其括在引号中,因为它可以被视为 dict
,您的 targetTemp
也被视为string 这就是为什么您看不到实际值的原因。
为简单起见,您可能需要查看 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
的格式)
让我们把代码缩短一点。
payload = "{...\"targetValue\": '+ targetTemp +'...}"
现在看到问题了吗? payload
是用双引号分隔的,所以为了退出、追加和 "re-enter" 字符串,需要使用双引号而不是单引号:
payload = "{...\"targetValue\": "+ targetTemp +"...}"
或者,更稳健且更简单的解决方案是将 payload
构建为包含 targetTemp
作为正常值的 Python 结构的 dict
,然后 then 用 json.dumps
:
payload_obj = {
"nodes": [{
"attributes": {
"targetHeatTemperature": {
"targetValue": targetTemp,
}
}
}]
}
payload = json.dumps(payload_obj)