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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:55:27