将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
相关产品推荐
相关产品推荐

