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

