如何合并从文件中读取的两个JSON对象为一条完整记录
问题说明
从文件读取到的内容是连续拼接的多个独立JSON对象,所有对象共同组成一条完整记录,直接调用pandas.read_json()解析会触发格式错误,示例如下:
- 原始输入内容:
{"a":1,"b":2,"c":3}{"x":[100],"y":"123"}
- 期望得到的合并后结果:
{ "a":1, "b":2, "c":3, "x":[100], "y":"123" }
实现方案
不要直接把原始字符串传给pandas.read_json(),先借助Python标准库json模块的原生解码器拆分连续JSON片段,合并所有键值对后再传入pandas即可,可直接运行的代码如下:
import json import pandas as pd # 替换为你从文件中读取到的原始字符串 raw_content = '{"a":1,"b":2,"c":3}{"x":[100],"y":"123"}' decoder = json.JSONDecoder() full_record = {} current_pos = 0 # 循环解析字符串中所有连续的JSON对象 while current_pos < len(raw_content): json_obj, current_pos = decoder.raw_decode(raw_content, current_pos) full_record.update(json_obj) # 打印验证合并结果 print(json.dumps(full_record, indent=4, ensure_ascii=False)) # 转换为pandas DataFrame df = pd.DataFrame([full_record])
注意事项
- 不推荐用正则匹配
}{拆分字符串的方案:如果JSON的字符串值里本身包含}{字符,正则拆分就会出错,raw_decode()是按照JSON语法规则做解析的,不会出现这类问题,稳定性更高 - 如果你的文件里有多行这样的连续拼接JSON,逐行读取后按上述逻辑处理即可
- 合并时如果不同JSON对象存在重复键,后面解析到的键值会覆盖前面的,和JSON的常规解析逻辑一致
内容的提问来源于stack exchange,提问作者Sridhar
相关产品推荐
相关产品推荐

