You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 23:36:00