如何在Python中解析无分隔符的多JSON字符串?
解决连续无分隔符多JSON字符串的解析问题
你遇到的情况是:单行包含多个嵌套JSON且无分隔符的字符串,比如:
contents = r'{"payload":{"device":{"serial":213}}}{"payload":{"device":{"serial":123}}}'
用pd.read_json(contents, lines=True)解析时触发报错:
ValueError: Unexpected character found when decoding array value (2)
报错原因
lines=True参数要求每行对应一个独立JSON对象,但你的输入是同一行里两个JSON直接拼接,没有换行或分隔符。解析器读完第一个JSON后碰到{,会误以为是数组元素的开头,但不符合数组格式规则,因此报错。
下面是两种实用的解决方法:
方法1:正则快速格式化(适合小数据)
通过正则将}{替换为},{,再给整个字符串包裹[],转成合法的JSON数组格式,之后就能正常解析:
import json import re import pandas as pd contents = r'{"payload":{"device":{"serial":213}}}{"payload":{"device":{"serial":123}}}' # 转换为合法JSON数组 formatted_json = f"[{re.sub(r'}{', '},{', contents)}]" # 解析为字典列表 data_list = json.loads(formatted_json) # 转为DataFrame df = pd.DataFrame(data_list) print(df)
方法2:逐流解析(适合大文件/大数据)
如果JSON内容体积很大,一次性加载会占用过多内存,可以用ijson库逐流解析每个独立JSON对象:
import ijson import pandas as pd contents = r'{"payload":{"device":{"serial":213}}}{"payload":{"device":{"serial":123}}}' data_list = [] current_obj = {} # 逐事件解析JSON流 for prefix, event, value in ijson.parse(contents): if event == 'start_map': current_obj = {} elif event == 'map_key': current_key = value elif event == 'end_map': data_list.append(current_obj) else: current_obj[current_key] = value # 转为DataFrame df = pd.DataFrame(data_list) print(df)
内容的提问来源于stack exchange,提问作者benito_h
相关产品推荐
相关产品推荐

