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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:50:18