首页 > 解决方案 > 在 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我需要所有代码值以逗号分隔。我想我的正则表达式有问题。请建议。

标签: regexsplunksplunk-query

解决方案


如果此数据以 JSON 格式引入,则无需将rex其取出

但是,如果不是,则问题出在您的正则表达式

在 regex101.com 上尝试一下 - 你会发现你获取了第一个值,因为你停在了一个文字上"

试试这个:

...
| rex field=_raw "codes\":\[(?<codes>[^\]]+)"
| eval codes=split(replace(codes,"\"",""),",")

这将codes成为一个多值字段

如果你不关心它是多值的,你可以这样做:

| eval codes=replace(codes,"\"","")

拉引号


推荐阅读