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

如何按数组值对大型嵌套JSON进行分组?

实现方案(基于Python)

针对你这种大体积嵌套JSON的结构重组需求,以下是高效可行的处理方式:

1. 读取解析JSON

注意标准JSON要求键为字符串,你的示例中使用了数字键,Python的json模块会自动将其转为字符串键,可直接解析。如果原数据格式不标准,可改用demjson库兼容读取:

import json

# 从文件读取数据
with open('your_data.json', 'r', encoding='utf-8') as f:
    raw_data = json.load(f)

2. 核心重组逻辑

遍历JSON的三层结构,将第二层的所有键合并为逗号分隔的字符串作为新键,再将对应第三层内容整合:

grouped_data = {}
for top_key, middle_layer in raw_data.items():
    # 拼接第二层所有键为新键
    combined_middle_key = ','.join(middle_layer.keys())
    # 处理第三层内容:
    # 情况1:第二层各键对应的第三层内容一致,直接取第一个值
    combined_value = next(iter(middle_layer.values()))
    # 情况2:第二层内容不同,需合并所有第三层键值对
    # combined_value = {}
    # for sub_dict in middle_layer.values():
    #     combined_value.update(sub_dict)
    grouped_data[top_key] = {combined_middle_key: combined_value}

3. 大文件内存优化

如果JSON文件过大无法一次性加载到内存,使用ijson进行流式处理,避免内存溢出:

import ijson

grouped_data = {}
with open('your_data.json', 'r', encoding='utf-8') as f:
    # 流式遍历顶层键值对
    for top_key, middle_layer in ijson.kvitems(f, ''):
        combined_middle_key = ','.join(middle_layer.keys())
        combined_value = next(iter(middle_layer.values()))
        grouped_data[top_key] = {combined_middle_key: combined_value}

4. 输出结果

将重组后的JSON写入文件:

with open('grouped_result.json', 'w', encoding='utf-8') as f:
    json.dump(grouped_data, f, indent=2, ensure_ascii=False)

关键注意点

  • 若第二层不同键对应的第三层内容有冲突(比如同键不同值),需根据业务需求调整合并规则,比如保留所有值为数组、覆盖旧值等。
  • Python 3.7+字典默认保留插入顺序,若需兼容旧版本,可使用collections.OrderedDict维护键的顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 23:30:57