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

如何将嵌套JSON文件转换为无嵌套的扁平化单属性结构?

JSON嵌套结构扁平化实现方案

场景针对性实现

针对你提供的JSON结构,直接按层级提取字段即可,Python实现代码如下:

import json

# 读取原始JSON文件
with open("input.json", "r", encoding="utf-8") as f:
    raw_data = json.load(f)

flatten_result = []
for item in raw_data:
    # 提取顶层非嵌套基础字段
    base_info = {
        "frame_id": item["frame_id"],
        "filename": item["filename"]
    }
    # 遍历objects数组,支持单帧对应多个检测目标的场景
    for obj in item["objects"]:
        temp = base_info.copy()
        # 合并对象内除坐标外的一级字段
        temp.update({k:v for k,v in obj.items() if k != "relative_coordinates"})
        # 合并嵌套的坐标字段
        temp.update(obj["relative_coordinates"])
        flatten_result.append(temp)

# 输出扁平化后的JSON文件
with open("output.json", "w", encoding="utf-8") as f:
    json.dump(flatten_result, f, indent=4, ensure_ascii=False)

运行后输出结果和你给出的JSON B格式完全一致,单帧存在多个检测目标时会自动拆分为多条独立的顶层记录,不会丢失数据。

通用嵌套JSON扁平化实现

如果需要处理结构不固定的任意嵌套JSON,可使用递归方法实现全层级打平,自动处理重名问题:

import json

def flatten_json(nested_obj, parent_key='', sep='_'):
    items = []
    if isinstance(nested_obj, dict):
        for k, v in nested_obj.items():
            new_key = f"{parent_key}{sep}{k}" if parent_key else k
            if isinstance(v, (dict, list)):
                items.extend(flatten_json(v, new_key, sep=sep).items())
            else:
                items.append((new_key, v))
    elif isinstance(nested_obj, list):
        for i, v in enumerate(nested_obj):
            new_key = f"{parent_key}{sep}{i}" if parent_key else str(i)
            if isinstance(v, (dict, list)):
                items.extend(flatten_json(v, new_key, sep=sep).items())
            else:
                items.append((new_key, v))
    return dict(items)

# 调用示例
with open("input.json", "r", encoding="utf-8") as f:
    raw_data = json.load(f)
flatten_result = [flatten_json(item) for item in raw_data]

该实现支持任意层数的对象、数组嵌套,可通过修改sep参数自定义嵌套键的连接符,避免键名重复。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:45:02