在 splunk 中打印 json 负载的字符串数组
Print String array of a json payload in splunk
我需要在 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,"\"","")
拉引号
我需要在 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,"\"","")
拉引号