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

Python解析JSON时使用f-string插入变量报格式错误如何解决

错误根源

f-string 语法中,单大括号{}是用来包裹待解析Python表达式的标记,如果要在f-string最终输出里保留字面意义的大括号,必须连续写两个大括号{{/}}做转义。
原代码里JSON结构本身的外层大括号没有做转义,f-string会把JSON对象的整段大括号内容识别为格式化表达式,解析时找不到合法的格式说明符,就会抛出ValueError: Invalid format specifier错误。
而且手动用f-string拼接JSON本身容错率极低,一旦变量是包含引号、换行、特殊字符的字符串,很容易生成非法格式的JSON,不推荐作为首选方案。

推荐实现方案

优先通过「构造Python原生数据结构 + json模块序列化」的方式生成JSON,完全规避大括号转义、特殊字符处理的问题:

import json

test = 10
# 先构建Python原生列表、字典结构,变量直接正常赋值即可
raw_data = [
    {
        "ID": test,
        "Name": "Pankaj",
        "Role": "CEO"
    }
]
# 序列化为标准合法JSON字符串,所有格式转义由json模块自动处理
json_data = json.dumps(raw_data)

json_object = json.loads(json_data)
json_formatted_str = json.dumps(json_object, indent=2)
print(json_formatted_str)

运行后输出:

[
  {
    "ID": 10,
    "Name": "Pankaj",
    "Role": "CEO"
  }
]

这种方式不管变量是数字、字符串、布尔值还是嵌套的列表、字典,json模块都会自动匹配JSON类型规则、转义特殊字符,不会出现格式错误,是生成JSON的标准做法。

f-string 临时适配方案

如果场景非常简单,确实需要直接用f-string写JSON模板,只需要把所有属于JSON语法的字面量大括号双写转义,仅在插入变量的位置保留单大括号即可:

import json

test = 10
# JSON本身的大括号全部双写转义,变量插入位置用单大括号
json_data = f'[{{"ID": {test},"Name":"Pankaj","Role":"CEO"}}]'

json_object = json.loads(json_data)
json_formatted_str = json.dumps(json_object, indent=2)
print(json_formatted_str)

注意:该方案仅适合结构固定、变量类型简单的场景,如果变量为字符串类型,手动包裹引号时很容易因为变量内含特殊字符导致JSON解析失败,复杂场景不要使用。

内容的提问来源于stack exchange,提问作者GVV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 19:56:49