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

如何将特定结构的JSON文件转换为Pandas DataFrame

将嵌套JSON转换为指定结构的Pandas DataFrame

问题描述

现有如下结构的JSON数据:

[
  {
    "name": "myName",
    "type": {
      "x": {
        "id": [
          "x1",
          "x2"
        ]
      },
      "y": {
        "id": "y1"
      },
      "z": {
        "id": "z1"
      }
    }
  }
]

该JSON的规则为:

  • type的键仅可取x、y、z,可缺失部分但至少存在一个;
  • 每个类型对应的id可以是单个值或列表,数量不超过10个。

需要将其转换为如下结构的Pandas DataFrame:

Nametypeid
myNamexx1
myNamexx2
myNameyy1
myNamezz1

尝试过to_json(orient="...")和json_normalize()方法,但无法展平JSON中的列表结构。

解决方法

可以通过遍历JSON数据,手动构造符合要求的字典列表,再转换为DataFrame,这种方式能灵活处理id是单个值或列表的情况:

import pandas as pd

# 加载JSON数据(此处直接用示例数据,实际可通过pd.read_json或json.load读取文件)
data = [
  {
    "name": "myName",
    "type": {
      "x": {
        "id": ["x1", "x2"]
      },
      "y": {
        "id": "y1"
      },
      "z": {
        "id": "z1"
      }
    }
  }
]

# 初始化结果列表
result_records = []

# 遍历顶层数据对象
for entry in data:
    current_name = entry["name"]
    # 遍历type下的每个类型键值对
    for type_label, type_content in entry["type"].items():
        # 统一处理id:单个值转为列表,保持逻辑一致
        id_values = type_content["id"]
        if not isinstance(id_values, list):
            id_values = [id_values]
        # 每个id生成一条记录
        for id_val in id_values:
            result_records.append({
                "Name": current_name,
                "type": type_label,
                "id": id_val
            })

# 转换为目标DataFrame
target_df = pd.DataFrame(result_records)
print(target_df)

代码逻辑说明

  1. 遍历原始JSON的顶层对象,提取name字段;
  2. 遍历type下的每个类型键(x/y/z),取出对应的id值;
  3. 将单个id值转为列表,统一后续循环处理的逻辑;
  4. 每个id对应生成一条包含Name、type、id的字典,添加到结果列表;
  5. 用结果列表直接生成目标结构的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:27:15