Splunk从JSON提取嵌套字段:amount.dollarAmt提取失败求助
解决方法
先拆解你之前查询的问题:
spath路径错误:你的JSON里amount嵌套在eventPayload.paymentMethod数组的第一个元素中,且路径里的空格(amount. dollarAmt)是无效语法,导致spath无法定位字段。rex正则匹配错误:JSON里的dollarAmt是数字类型,没有双引号,你写的"dollarAmt\":\"是匹配带引号的字符串,自然匹配不到;另外捕获组变量名里的空格(?< dollarAmt >)也是错误的,变量名不能包含空格。
给你几个可行的修正方案:
方案一:用正确的spath提取
直接指定完整的嵌套路径,明确取数组第一个元素里的amount.dollarAmt:
| spath output=dollarAmt path=eventPayload.paymentMethod{0}.amount.dollarAmt
如果需要提取数组中所有的dollarAmt(包括第二个元素里的actualAmt.dollarAmt),可以用通配符实现多值提取:
| spath output=dollarAmt path=eventPayload.paymentMethod{*}.*.dollarAmt
方案二:修正rex正则
针对数字类型的dollarAmt调整正则,同时去掉变量名里的空格:
| rex "amount\s*:\s*\{\s*\"dollarAmt\"\s*:\s*(?<dollarAmt>\d+\.?\d*)"
这个正则会忽略字段间的空格,精准匹配amount对象里的数字值。
方案三:展开数组后单独提取
如果paymentMethod包含多个元素,想分别处理每个元素的字段,可以先展开数组再提取:
| spath path=eventPayload.paymentMethod output=paymentMethod | mvexpand paymentMethod | spath input=paymentMethod output=dollarAmt path=amount.dollarAmt
这样每个数组元素会生成独立事件,仅包含amount的元素会提取出dollarAmt值。
内容的提问来源于stack exchange,提问作者rickygrimes
相关产品推荐
相关产品推荐

