列表数组转JSON格式异常求助:目标与实际输出不符
解决JSON输出格式不符预期的问题
问题根源
你当前代码的核心问题是把所有条目对应的字段分别收集到同一个字典的数组中(比如list['id']存所有id),导致输出是「字段对应数组」的结构。但你的目标是每个条目作为独立对象,组成一个对象数组,所以需要调整数据收集的逻辑。
目标与实际输出对比
目标输出(修正后合法JSON结构)
[ { "id": "1", "Name": "xxx", "Image": "https://xxx.xxx.png" }, { "id": "2", "Name": "xx2", "Image": "https://xx2.xxx.png" } ]
注:原目标输出存在语法错误,合法JSON需用
[]包裹对象数组,且对象末尾不能留多余逗号
实际输出(错误结构)
{ "id": ["1","2"], "Image": ["https://xxx.xxx.png","https://xx2.xxx.png"], "Name": ["xxx", "xx2"] }
修改后的代码
import json # 修正原JSON feed的语法错误(示例数据) json_feed = [ { "document": { "id": "1", "image": "https://xxx.xxx.png", "name": "xxx" } }, { "document": { "id": "2", "image": "https://xx2.xxx.png", "name": "xx2" } } ] # 改为空数组,用于存储每个独立的条目对象 result_list = [] links = {'id': [], 'Image': []} # 模拟分页获取数据的函数(原代码未实现,此处作示例) def getDataPerPage(page_num): return {"found": len(json_feed), "hits": json_feed} # 调整数据收集逻辑:生成独立条目对象 def getData(hits): for item in filter(None, hits): doc = item['document'] # 为每个document生成一个独立的条目字典 entry = { "id": doc['id'], "Name": doc['name'], "Image": doc['image'] } result_list.append(entry) # 保留原links的收集逻辑 links['id'].append(doc['id']) links['Image'].append(doc['image']) # 分页获取并处理数据 pageNum = 1 data = getDataPerPage(pageNum) try: itemsNo = data['found'] getData(data['hits']) while itemsNo > 24: itemsNo -= 24 pageNum += 1 data = getDataPerPage(pageNum) getData(data['hits']) except Exception as e: print(f"出错了: {e}") # 保存对象数组到JSON文件 with open('./output/data_chart.json', 'w') as f: json.dump(result_list, f, indent=2)
关键修改点
- 数据结构调整:把原字典
list = {'id':[], ...}改为空数组result_list = [],用来存储每个独立的条目对象。 - 条目生成逻辑:循环中为每个
document创建包含目标字段的字典,直接追加到数组,而非拆分到字段数组中。 - 变量名规范:避免使用Python内置类型
list作为变量名,改用result_list防止冲突。 - JSON格式修正:用数组包裹所有对象,
json.dump自动处理合法格式,indent=2让输出更易读。
内容的提问来源于stack exchange,提问作者askmeaquestion1234
相关产品推荐
相关产品推荐

