regex - 在 splunk 中打印 json 有效负载的字符串数组
问题描述
我需要在我的 json 对象中打印一个字符串数组和一个字段。
数据:
{ "key1":"val1", "key2":"value2", "codes":["apple","mango","banana","orange"], "key3_conditional":"yes"}
我的搜索查询:
<My search query>
| rex "\|(?<payload>[^\|]*)$"
| spath input=payload
| rex "\"codes\":\"(?<codes>[^\"]*)"
| eval is_unknown=if(isnotnull(key3_conditional), key3_conditional, "no")
| table codes, is_unknown
期望的结果
codes | is_unknown
--------------------------------------------------
apple, mango, banana, orange | yes
目前,这仅显示代码中的第一个值,即apple
我需要所有代码值以逗号分隔。我想我的正则表达式有问题。请建议。
解决方案
如果此数据以 JSON 格式引入,则无需将rex
其取出
但是,如果不是,则问题出在您的正则表达式
在 regex101.com 上尝试一下 - 你会发现你只获取了第一个值,因为你停在了一个文字上"
试试这个:
...
| rex field=_raw "codes\":\[(?<codes>[^\]]+)"
| eval codes=split(replace(codes,"\"",""),",")
这将codes
成为一个多值字段
如果你不关心它是多值的,你可以这样做:
| eval codes=replace(codes,"\"","")
拉引号