在 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,"\"","")

拉引号