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

为何Python生成的JSON为字符串格式、含转义换行符?如何解决

问题根源

当前生成的JSON结构异常,核心原因是把API返回的纯文本格式响应当成普通字符串直接追加到了数据数组中。
json.dump在序列化普通字符串时,会自动给字符串包裹外层双引号,同时把字符串内部的双引号、换行/回车符做转义处理,这就是你看到大括号被外层双引号包裹、文件内满是\n/\r转义符的根本原因。

修复方案
  • 禁止直接使用requests返回的.text属性值追加到数据数组。这是未经解析的纯文本内容,直接传入会被当做普通字符串处理。
  • 拿到API响应后,先把JSON格式的响应体解析成Python原生的字典/列表对象,再追加到数组中:
    • 优先使用requests内置的.json()方法,一步完成JSON文本到Python对象的转换
    • 若接口响应头配置异常导致.json()方法失效,可手动调用json.loads(result_detail.text)完成解析
  • 移除循环内部的write_json(data)调用。原有代码每处理一个项目就重写一次文件,既降低IO效率,还可能因中途程序异常导致文件写入不完整。等所有项目数据处理完成后,再统一执行一次文件写入即可。
  • 增加API响应状态校验,避免接口报错时把错误页面的内容写入最终JSON文件。
修改后的参考代码
def write_json(data, filename='data.json'):
    with open(filename, 'w', encoding='utf-8') as wf:
        json.dump(data, wf, ensure_ascii=False, indent=4)

# 读取存储项目ID的本地JSON
with open('sast-projects.json', 'r', encoding='utf-8') as f:
    projects = json.load(f)

# 读取基础数据文件
with open('data.json', 'r', encoding='utf-8') as json_file:
    data = json.load(json_file)
temp = data['data']

for project in projects:
    result_detail = requests.get(
        url_detail + str(project['id']),
        headers=header_detail
    )
    # 仅在请求成功时做解析
    if result_detail.status_code == 200:
        # 解析为Python原生对象,而非纯文本
        parsed_detail = result_detail.json()
        temp.append(parsed_detail)

# 全量数据处理完成后再统一写入文件
write_json(data)
效果说明

修改后生成的JSON文件中,每个从API获取的项目详情会以标准嵌套对象的形式存在于data数组中,不会再出现外层包裹双引号、满是转义换行符的异常结构。

若运行中.json()方法抛出解析错误,可先打印对应请求的result_detail.text内容,确认接口返回的是否为合规JSON格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 00:45:00