2017-01-11 4 views
2

Я использую jq для анализа некоторых из моих журналов, но некоторые строки журнала не могут быть проанализированы по различным причинам. Есть ли способ, чтобы jq игнорировал эти строки? Кажется, я не могу найти решение. Я попытался использовать аргумент -seq, рекомендованный некоторыми людьми, но --seq игнорирует все строки в моем файле.Игнорировать Unparseable JSON с jq

+1

Вопрос не в отдельных строках, которые невозможно разобрать. Речь идет об игнорировании или обходе строк с проблемами. Представьте, что у вас есть линия, которая только «123». – Brandon

ответ

7

Предполагая, что каждая запись в журнале ровно одна строка, вы можете использовать опцию -R или --raw-input сказать JQ, чтобы оставить линии неанализируемые, после чего вы можете предварять fromjson? | к фильтру, чтобы JQ попытаться разобрать каждую строку в формате JSON и выбросить те, что ошибка.

+0

О, это интересно. Я сделаю это. Благодаря! – Brandon

+0

Работал! Большое спасибо! – Brandon

+0

Это сработало и для меня! –

1

Есть несколько Q & Как на FAQ page дело с темой «недействительных JSON», но видеть, в частности, Q:

Есть ли способ иметь JQ продолжать идти после того, как он попадает ошибку во входном файле?

В частности, это показывает, как использовать --seq.

Однако, из редких деталей, которые вы указали (SO recommends, приведен минимальный пример), казалось бы, было бы лучше просто использовать inputs. Идея состоит в том, чтобы обрабатывать один объект JSON за раз, используя «try/catch», например.

def handle: inputs | [., "length is \(length)"] ; 
def process: try handle catch ("Failed", process) ; 
process 

Не забудьте использовать опцию -n при вызове jq.

См. Также Processing not-quite-valid JSON.

 Смежные вопросы

  • Нет связанных вопросов^_^