如何从含嵌套payload的JSON文件创建pandas DataFrame并解决读取报错
问题原因
两个报错均由JSON文件格式不匹配导致:
- 你当前的JSON文件中每个JSON对象跨越多行,不符合
pd.read_json(lines=True)和逐行json.loads要求的每行对应一个完整JSON对象的规则,单段读取的内容无法被解析为合法JSON payload字段是转义后的嵌套JSON字符串,需要二次解析才能提取内部字段
解决方案
完整可运行代码如下:
import json import pandas as pd # 读取整个文件内容 with open('data.JSON', 'r', encoding='utf-8') as f: file_content = f.read() # 分割多个跨行的JSON对象 raw_json_segments = [seg.strip() for seg in file_content.split('}\n{') if seg.strip()] processed_json_list = [] for seg in raw_json_segments: # 补全分割时丢失的大括号 if not seg.startswith('{'): seg = '{' + seg if not seg.endswith('}'): seg = seg + '}' processed_json_list.append(seg) # 解析JSON并提取payload字段 payload_data = [] for json_str in processed_json_list: outer_json = json.loads(json_str) # 二次解析嵌套的payload字符串 payload = json.loads(outer_json['event']['payload']) payload_data.append(payload) # 生成目标DataFrame,自动对齐不同传感器的字段 df = pd.DataFrame(payload_data)
运行后生成的DataFrame会自动适配所有传感器类型的字段,缺失字段对应位置自动填充NaN,符合多类型传感器的数据处理需求。
可选扩展
如果需要同时保留外层event下的其他字段(如origin设备名),可以在解析时合并字段:
payload = json.loads(outer_json['event']['payload']) # 合并外层字段到payload payload['origin'] = outer_json['event']['origin'] payload_data.append(payload)
内容的提问来源于stack exchange,提问作者Thekingis007
相关产品推荐
相关产品推荐

