无法读取SPLUNK中的嵌套json数组

问题描述 投票:0回答:1

我正在使用“ spath”从日志文件中读取json结构。

{"failure_reason":null,"gen_flag":"GENERATED","gen_date":"2020-02-15","siteid":"ABC","_action":"Change","order":"123"}

我能够解析json以上。

但是,“ spath”函数无法读取该json中的嵌套数组:

{"failure_reason":"[{"module":"Status Report","reason":"Status Report is not available","statusCode":"503"}]","gen_flag":"GENERATED_PARTIAL","gen_date":"2020-02-15","siteid":"ABC","_action":"Change","wonum":"321"}.

请帮助!

splunk splunk-query
1个回答
0
投票

您的事件不是有效的JSON。 JSON数组不应被"包围。

将您的事件复制到以下任何JSON验证器中,并确认它不正确。

现在,尝试更正的事件。

{"failure_reason":[{"module":"Status Report","reason":"Status Report is not available","statusCode":"503"}],"gen_flag":"GENERATED_PARTIAL","gen_date":"2020-02-15","siteid":"ABC","_action":"Change","wonum":"321"}

通过以下搜索,您可以看到spath与修改后的JSON一起正常工作。

| makeresults 
| eval raw="{\"failure_reason\":[{\"module\":\"Status Report\",\"reason\":\"Status Report is not available\",\"statusCode\":\"503\"}],\"gen_flag\":\"GENERATED_PARTIAL\",\"gen_date\":\"2020-02-15\",\"siteid\":\"ABC\",\"_action\":\"Change\",\"wonum\":\"321\"}" 
| spath input=raw

如果需要预处理事件以从阵列中删除"的方法,则可以尝试以下操作,这可能会删除多余的"。这实际上取决于事件的结构,可能不是100%,但足以使您入门。尝试从源头确定事件的格式。

| makeresults | eval raw="{\"failure_reason\":\"[{\"module\":\"Status Report\",\"reason\":\"Status Report is not available\",\"statusCode\":\"503\"}]\",\"gen_flag\":\"GENERATED_PARTIAL\",\"gen_date\":\"2020-02-15\",\"siteid\":\"ABC\",\"_action\":\"Change\",\"wonum\":\"321\"}" 
| rex mode=sed field=raw "s/\"\[/[/" | rex mode=sed field=raw "s/\]\"/]/"
| spath input=raw
© www.soinside.com 2019 - 2024. All rights reserved.