Python:如何使用**dict参数格式化嵌套JSON字符串?
报错原因
- 模板语法问题:你在
device字段的占位符外层包裹了双引号,会导致填充后device的值被识别为JSON字符串类型,而非你预期的嵌套对象类型 - 格式兼容问题:直接将Python字典传入
str.format()时,输出的是Python风格的字典表示(使用单引号包裹键值),不符合JSON要求双引号的语法规范,json.loads无法识别该格式
解决方案
方案1:直接构造字典(推荐)
不需要手动编写JSON模板,直接构造Python字典后通过json.dumps转成标准JSON字符串即可,是最稳妥的方案:
import json kwargs = {"name": "testname", "device": {"plt": "dsk"}} # 直接构造目标结构的字典 payload_dict = { "name": kwargs["name"], "device": kwargs["device"] } # 如果需要JSON字符串用于请求 payload_str = json.dumps(payload_dict, indent=4) # 如果是用requests发POST请求,不需要手动转字符串,直接传json参数即可 # import requests # requests.post(url, json=payload_dict) print(payload_str)
方案2:使用字符串模板格式化
如果必须使用字符串模板的写法,需要先把嵌套字典转成标准JSON字符串,且去掉占位符外层的双引号:
import json # 嵌套字典先转成JSON格式字符串 kwargs = { "name": "testname", "device": json.dumps({"plt": "dsk"}) } # 注意device的占位符外层没有双引号 payload_template = """ {{ "name": "{name}", "device": {device} }} """ formatted_payload = payload_template.format(**kwargs) payload = json.loads(formatted_payload) print(json.dumps(payload, indent=4))
两种方案输出都符合你的预期:
{ "name": "testname", "device": {"plt": "dsk"} }
内容的提问来源于stack exchange,提问作者Silence He
相关产品推荐
相关产品推荐

