#regex #splunk #splunk-query
#регулярное выражение #splunk #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
В настоящее время это отображает только 1-е значение в кодах, т.Е. apple
И мне нужны все значения кодов через запятую. Я предполагаю, что есть какая-то проблема с моим регулярным выражением. Пожалуйста, предложите.
Комментарии:
1. Вы можете получить более быстрые ответы по адресу community.splunk.com который активно контролируется сотрудниками Splunk.
Ответ №1:
Если эти данные вводятся в JSON, вам не придется rex
их выводить
Если нет, то проблема заключается в вашем регулярном выражении
Попробуйте это на regex101.com — вы увидите, что получаете только первое значение, потому что останавливаетесь на литерале "
Попробуйте это вместо:
...
| rex field=_raw "codes":[(?<codes>[^]] )"
| eval codes=split(replace(codes,""",""),",")
Это превратит codes
в многозначное поле
Если вас не волнует, что он многозначный, вы можете просто сделать:
| eval codes=replace(codes,""","")
для извлечения кавычек
Комментарии:
1. Спасибо. Это работает. Я заметил некоторую проблему с этим, и вместо этого я использую это
| rex field=_raw ""codes":[(?<codes>[^]] )"
для захвата поля как"codes"
2. Я полагаю, что это была опечатка, но в 1-м eval
"
отсутствовал.| eval codes=split(replace(codes,""",""),",")
3. @AyushKumar — да, похоже, я пропустил кавычки. Теперь исправлено 🙂