Python遍历JSON数据输出合法JSON时无逗号分隔问题求助
问题:Python遍历JSON后输出合法JSON格式失败
我是Python新手,想要编写脚本遍历JSON数据并将结果输出到新JSON文件。但使用json.dumps(output)时,输出内容没有逗号分隔,不是合法JSON。
原始JSON数据
{"product1":[{"date":"10-6-2022", "title":"adidas", "qty":"250", "origin":"vietnam"},{"date":"10-7-2022", "title":"nike", "qty":"200", "origin":"new zeland"},{"date":"10-8-2022", "title":"puma", "qty":"180", "origin":"USA"}],"product2":[{"date":"10-6-2022", "title":"ecco", "qty":"120", "origin":"france"},{"date":"10-7-2022", "title":"under armor", "qty":"450", "origin":"china"},{"date":"10-8-2022", "title":"fila", "qty":"360", "origin":"turkey"}]}
原始Python脚本
import json from datetime import date today = date.today() dty = today.strftime("%#m-%#d-%Y") f = open('2.json') data = json.loads(f.read()) for k, v in data.items(): for x in range(3): title = v[x]['title'] quantity = v[x]['qty'] origin = v[x]['origin'] if v[x]['date'] == dty: products = {"title": title,"quantity" : quantity,"origin" : origin,"date" : dty} print(products)
当前输出
{'title': 'adidas', 'quantity': '250', 'origin': 'vietnam', 'date': '10-6-2022'} {'title': 'ecco', 'quantity': '120', 'origin': 'france', 'date': '10-6-2022'}
使用json.dumps后的输出
{"title": "adidas", "quantity": "250", "origin": "vietnam","date": "10-6-2022" } {"title": "ecco","quantity": "120","origin": "france","date": "10-6-2022"}
期望输出
{'title': 'adidas', 'quantity': '250', 'origin': 'vietnam', 'date': '10-6-2022'}, {'title': 'ecco', 'quantity': '120', 'origin': 'france', 'date': '10-6-2022'}
解决方案
你期望的带逗号的对象格式并不是完整的合法JSON,标准JSON要求多个对象必须包裹在数组([])中才能被解析器正确识别。问题出在你每次循环都单独打印一个字典,没有将它们整合为统一的数组结构。正确做法是先把符合条件的所有对象收集到列表中,再对整个列表执行json.dumps。
修改后的脚本:
import json from datetime import date today = date.today() dty = today.strftime("%#m-%#d-%Y") # 初始化列表存储符合条件的产品 matched_products = [] # 用with语句自动管理文件,避免资源泄漏 with open('2.json', 'r') as f: data = json.load(f) # 遍历所有产品列表 for _, products_list in data.items(): # 直接遍历列表元素,不用硬编码range(3),适配数据长度变化 for product in products_list: if product['date'] == dty: matched_product = { "title": product['title'], "quantity": product['qty'], "origin": product['origin'], "date": dty } matched_products.append(matched_product) # 将整个列表转为格式化的合法JSON字符串 json_output = json.dumps(matched_products, indent=2) print(json_output) # 写入到新JSON文件 with open('output.json', 'w') as out_f: out_f.write(json_output)
修改后的合法输出
[ { "title": "adidas", "quantity": "250", "origin": "vietnam", "date": "10-6-2022" }, { "title": "ecco", "quantity": "120", "origin": "france", "date": "10-6-2022" } ]
关键调整点
- 新增
matched_products列表,统一收集所有符合日期条件的产品对象,而非每次单独打印。 - 使用
json.dumps(matched_products)时,会自动为数组元素添加逗号并包裹在[]中,生成标准JSON格式。 - 替换
range(3)为直接遍历products_list,避免硬编码元素数量,适配数据长度变化。 - 用
with语句处理文件操作,自动关闭文件,代码更安全规范。
内容的提问来源于stack exchange,提问作者Dogme
相关产品推荐
相关产品推荐

