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

如何使用JSONPath读取结构不固定的Kafka消息字段

JSONPath 适配多结构字段读取方案

核心实现逻辑:使用JSONPath的递归下降运算符..,可以忽略中间层级差异,直接匹配指定名称的后代节点,完美适配有无derivationdetails层的两种消息结构。


之前读取失败的原因

  • batchid返回空:首先是字段名大小写匹配问题,样例中业务ID为大写开头Id,你之前写的小写id拼写不匹配;其次$.payload[*]仅能匹配payload下的直接子属性值,结合拼写错误会直接返回空值
  • attributes字段读取失败:一方面是层级未做兼容,另一方面你写的itemId首字母大写,和样例中全小写itemid的字段名不匹配

通用读取表达式

所有表达式均可同时适配两种消息结构,直接返回对应字段值:

1. 基础字段

# 读取业务Id(注意首字母大写和样例保持一致)
$..payload..Id
# 读取itemid
$..payload..itemid
# 读取batchid
$..payload..batchid

2. attributes下的子字段

# 读取attributes下的itemid
$..payload..attributes.itemid
# 读取attributes下的lineNbr
$..payload..attributes.lineNbr
# 读取attributes下的cat
$..payload..attributes.cat
# 读取attributes下的subcat
$..payload..attributes.subcat
# 读取attributes下的indicator
$..payload..attributes.indicator

3. Exception下的相关字段

# 读取Exception下所有values数组元素
$..payload..Exception.values[*]
# 读取values中指定下标的type值,以下标0为例
$..payload..Exception.values[0].type
# 读取values中所有rules数组内容
$..payload..Exception.values[*].rules[*]
# 读取Exception下所有rulesBagInfo数组元素
$..payload..Exception.rulesBagInfo[*]
# 读取rulesBagInfo中所有rulesMatch数组内容
$..payload..Exception.rulesBagInfo[*].rulesMatch[*]
# 读取rulesBagInfo中的uniqueid值
$..payload..Exception.rulesBagInfo[*].uniqueid

如果需要做条件过滤,可使用过滤器语法,比如筛选type=PICK的values元素:

$..payload..Exception.values[?(@.type == 'PICK')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:54:04