如何为API返回的JSON输出添加顶层根节点info?
解决思路:给JSON数组添加顶层"info"节点
你之前用字符串拼接+str(data)的方式会直接破坏JSON格式——str(data)输出的是Python列表的字符串形式(带单引号、不符合JSON规范),再用json.dump写入时,会把整个拼接字符串当成普通JSON值转义,自然出问题。
正确的做法是直接用Python字典构造目标结构,再通过json模块序列化输出,步骤如下:
实现代码
假设data已经是你从API获取并解析后的Python列表(比如用json.load()读取的结果):
import json # 示例:原API返回解析后的Python列表 data = [ {"Id": 1, "FirstName": "Ken", "LastName": "Sánchez", "Info": {"MiddleName": "J"}}, {"Id": 2, "FirstName": "Terri", "LastName": "Duffy", "Info": {"MiddleName": "Lee"}}, {"Id": 3, "FirstName": "Roberto", "LastName": "Tamburello"}, {"Id": 4, "FirstName": "Rob", "LastName": "Walters"}, {"Id": 5, "FirstName": "Gail", "LastName": "Erickson", "Info": {"Title": "Ms.", "MiddleName": "A"}} ] file_name = "output.json" with open(file_name, 'w', encoding='utf-8') as f: # 构造包含顶层info节点的字典 wrapped_data = {"info": data} # 序列化写入,ensure_ascii=False保留特殊字符,indent格式化输出 json.dump(wrapped_data, f, ensure_ascii=False, indent=4)
错误原因说明
str(data)生成的是Python语法的列表字符串(比如用单引号包裹键名),不是标准JSON格式- 你拼接的
data2是一个普通字符串,json.dump(data2, f)会把它转义成JSON字符串值,最终文件里会出现类似"{\"info\":[{...}]}"的错误结构
最终输出效果
运行代码后,生成的JSON会完全符合你的期望:
{ "info": [ { "Id": 1, "FirstName": "Ken", "LastName": "Sánchez", "Info": { "MiddleName": "J" } }, { "Id": 2, "FirstName": "Terri", "LastName": "Duffy", "Info": { "MiddleName": "Lee" } }, { "Id": 3, "FirstName": "Roberto", "LastName": "Tamburello" }, { "Id": 4, "FirstName": "Rob", "LastName": "Walters" }, { "Id": 5, "FirstName": "Gail", "LastName": "Erickson", "Info": { "Title": "Ms.", "MiddleName": "A" } } ] }
内容的提问来源于stack exchange,提问作者testdata
相关产品推荐
相关产品推荐

