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

将JSON拆分为多个小型JSON文件时遇解析问题求助

解决XML转JSON后的大文件拆分问题

你好呀!看你已经搞定了XML到JSON的转换,但在拆分大JSON为多个小文件这一步卡壳了对吧?我来帮你补全逻辑,一步步实现拆分功能。

首先先把你现有的代码整理补全(看起来最后一行没写完):

import json
import pathlib
from pprint import pprint
import xmltodict
from yattag import indent

# 创建目标文件夹,用变量存路径更易维护
output_dir = pathlib.Path('x:/xx/xx/AppData/Local/Programs/Python/Python36-32/example')
output_dir.mkdir(parents=True, exist_ok=True)

# XML转JSON(保留字典格式方便后续处理,不用先转成字符串)
with open("text.xml", 'rb') as f:
    xmlString = f.read()
data_dict = xmltodict.parse(xmlString)

# 可选:先保存完整的大JSON文件
with open(output_dir / "data.json", 'w', encoding='utf-8') as f:
    json.dump(data_dict, f, indent=4, ensure_ascii=False)

接下来核心是拆分逻辑,拆分通常针对JSON里的数组类型数据(比如包含多个子对象的列表)。我举个通用示例,你可以根据自己的JSON结构调整:

# 关键:根据你的实际JSON结构,定位到要拆分的数组
# 比如转换后的JSON结构是 {"root": {"products": [{}, {}, ...]}},就这么取
target_items = data_dict.get("root", {}).get("products", [])

# 遍历数组,逐个生成小JSON文件
for idx, item in enumerate(target_items):
    # 给文件命名:可以用索引,或者子对象里的唯一标识(比如item.get("id", idx))
    file_name = f"product_{idx}.json"
    file_path = output_dir / file_name
    
    # 写入小文件,注意编码避免乱码
    with open(file_path, 'w', encoding='utf-8') as f:
        json.dump(item, f, indent=4, ensure_ascii=False)
    
    print(f"已生成拆分文件:{file_path}")

几个重要提示:

  • 适配你的JSON结构:先运行pprint(data_dict)打印出完整的JSON结构,找到你要拆分的数组位置,调整target_items的获取路径。
  • 更友好的文件名:如果子对象有唯一标识(比如id、sku字段),用这些字段命名比索引更直观,比如f"product_{item['sku']}.json"。
  • 处理空数据:如果数组里有空对象,可以加判断if item:再写入,避免生成空文件。
  • 编码问题:写入时加上encoding='utf-8'和ensure_ascii=False,能避免中文等非ASCII字符乱码。

如果你的JSON不是数组结构,而是需要按其他维度拆分(比如按某个字段的分组),也可以基于类似逻辑:先提取对应子集,再逐个保存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:10:32