Невозможно прочитать вложенный массив json в SPLUNK - PullRequest
0 голосов
/ 15 февраля 2020

Я использую "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"}.

, пожалуйста, помогите!

1 Ответ

0 голосов
/ 16 февраля 2020

Ваше мероприятие недействительно JSON. Массив JSON не должен быть окружен " s.

. Скопируйте ваше событие в любой из следующих 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

Если вам нужен способ предварительной обработки события для удаления " s из массива, вы можете попробовать следующее, что может удалить лишние " s. Это действительно зависит от структуры мероприятия, и может не быть 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
...