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

Python读取DB2中含多余末尾大括号的JSON消息报错求助

JSON解析报错问题排查与解决

问题描述

我是Python新手,从DB2数据库提取JSON格式的MESSAGE_TX列到Pandas DataFrame后,尝试用json.loads()解析为对象时,触发JSONDecodeError("Extra data", s, end)错误。检查发现JSON字符串末尾存在多余的大括号,使用rstrip()处理后仍报错,需要解决方法。

示例查询数据

INSERT_TS                  MESSAGE_TX
0  2020-06-17 00:41:36.737369  {"ftcId":XXXX,"nbId":XXXX,"Id":XXXXX...

现有代码

conn = ibm_db.connect(db,"","","")
pconn = ibm_db_dbi.Connection(conn)

bom53rows = pd.read_sql(query, pconn)
df = pd.DataFrame(bom53rows)

print(df[["MESSAGE_TX"]])

policyMessage = df.at[0, 'MESSAGE_TX']
policyMessage.rstrip()

bom03Message = json.loads(policyMessage)

解决步骤

1. 修复rstrip()的使用错误

Python字符串是不可变类型,rstrip()方法会返回处理后的新字符串,不会修改原变量。你之前的代码没有将处理结果赋值,等于没做任何处理。同时要指定去除的目标字符(默认只删空白):

policyMessage = df.at[0, 'MESSAGE_TX']
# 去除末尾所有多余的大括号
cleaned_message = policyMessage.rstrip('}')
# 尝试解析
bom03Message = json.loads(cleaned_message)

2. 排查隐藏的多余字符

如果仍报错,先打印字符串末尾的原始内容,确认是否有换行、制表符等隐藏字符:

# 打印最后20个字符的原始状态
print("字符串结尾详情:", repr(policyMessage[-20:]))

如果有其他多余字符,可以一并去除:

# 去除末尾的换行、制表符、空格和大括号
cleaned_message = policyMessage.rstrip('\n\t }')
bom03Message = json.loads(cleaned_message)

3. 正则提取合法JSON结构

如果上述方法无效,用正则表达式匹配最外层的JSON结构,提取合法部分:

import re
import json

policyMessage = df.at[0, 'MESSAGE_TX']
# 匹配从第一个{到最后一个}的完整JSON结构(支持多行)
match = re.search(r'^\{.*\}$', policyMessage, re.DOTALL)
if match:
    cleaned_message = match.group()
    bom03Message = json.loads(cleaned_message)
else:
    print("未找到合法的JSON结构")

内容的提问来源于stack exchange,提问作者Karson074

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:37:22