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

使用json_normalize处理嵌套JSON遇TypeError问题求助

问题解决:JSON展开成表格的语法与代码错误修复

你的问题源于JSON文件语法错误和json_normalize参数的错误使用,以下是分步解决方案:

1. 修正JSON文件的语法问题

你提供的JSON存在两处语法错误,会直接导致读取失败:

  • ob1列表内的每个{'values': ...}字典之间缺少逗号分隔
  • 字符串类型的STATUS值closed未加双引号(JSON要求字符串必须用双引号包裹)

修正后的JSON内容如下:

[
    {
        "ob1": [
            {"values": {"ID": 2133, "STATUS": "closed", "name": "Sara"}},
            {"values": {"ID": 5432, "STATUS": "closed", "name": "Jon"}},
            {"values": {"ID": 5442, "STATUS": "closed", "name": "jen"}}
        ]
    }
]

2. 修正代码逻辑错误

原代码的核心问题是read_json参数和json_normalize的配置逻辑错误,以下是两种可行的正确实现:

方案一:先拆分嵌套列表再展开字典

import pandas as pd

# 读取修正后的JSON,去掉lines=True(该参数适用于每行一个独立JSON对象的场景)
df = pd.read_json('Data.json')

# 将ob1列中的嵌套列表拆分为每行一个元素
df_exploded = df.explode('ob1')

# 把每个元素中的values字典展开为单独列
df_values = df_exploded['ob1'].apply(pd.Series)['values'].apply(pd.Series)

方案二:直接使用json_normalize的正确参数

import pandas as pd
from pandas.io.json import json_normalize
import json

# 直接读取原始JSON数据
with open('Data.json', 'r') as f:
    data = json.load(f)

# 配置json_normalize,先展开ob1的嵌套列表,再提取values字段
df_values = json_normalize(
    data,
    record_path=['ob1'],  # 指定需要展开的嵌套列表路径
    meta=None
)['values'].apply(pd.Series)

代码错误说明

  • 原代码中lines=True参数不适用:你的JSON是完整的数组结构,并非每行一个独立JSON对象,会导致读取后的数据结构异常。
  • 原代码的meta=[['ID', 'STATUS','name']]完全错误:meta参数用于保留上层结构的字段(比如ob1父级的其他字段),而你要提取的字段嵌套在values内部,不需要放在meta中。

运行上述修正后的代码,即可得到包含ID、STATUS、name三列的目标表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:50:04