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

如何自动修复Kafka消息中缺失引号的字典键以实现JSON解析?

解决非标准JSON(键无引号)的解析问题

针对Kafka消息中字典键缺失双引号导致json.loads解析失败的问题,这里提供两种简便的自动转换方法:

方法一:正则表达式补全键的双引号

利用正则匹配未加引号的键,给它们补上双引号,再用标准json库解析。这种方法无需额外安装依赖,适合快速解决问题。

代码示例:

import re
import json

# 模拟Kafka消息的字节内容
msg_value = b'{time:"2022-10-23 06:55:00.000000 UTC",name:"NLU:G1H6J67 - SF, 6a, Zh. DE A", address:"11.11.11.11",address_name:null}'
value_str = msg_value.decode('utf-8')

# 正则替换:匹配{或,后的空白+键名,给键名添加双引号
pattern = re.compile(r'(?<=[{,]\s*)([a-zA-Z0-9_\-:]+)(?=\s*:)')
fixed_str = pattern.sub(r'"\1"', value_str)

# 解析为标准字典
data = json.loads(fixed_str)
# 按需重命名键
data = {
    "cal_timestamp_time": data["time"],
    "device_name": data["name"],
    "device_ip_address": data["address"],
    "subscriber_ip_address": data["address_name"]
}
print(data)

注意:如果键名包含空格等特殊字符,需要调整正则表达式的字符范围,确保能匹配到所有可能的键名。

方法二:使用JSON5库解析

JSON5是JSON的超集,原生支持无引号键、末尾逗号等非标准语法,直接用它的解析器就能处理这类消息。

首先安装依赖:

pip install json5

代码示例:

import json5

# 模拟Kafka消息的字节内容
msg_value = b'{time:"2022-10-23 06:55:00.000000 UTC",name:"NLU:G1H6J67 - SF, 6a, Zh. DE A", address:"11.11.11.11",address_name:null}'
value_str = msg_value.decode('utf-8')

# 直接解析非标准JSON
data = json5.loads(value_str)
# 按需重命名键
data = {
    "cal_timestamp_time": data["time"],
    "device_name": data["name"],
    "device_ip_address": data["address"],
    "subscriber_ip_address": data["address_name"]
}
print(data)

这种方法更健壮,能处理各种复杂的非标准JSON语法,无需手动维护正则表达式,适合键名格式多样的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:35:41