Я использую jq для анализа некоторых из моих журналов, но некоторые строки журнала не могут быть проанализированы по различным причинам. Есть ли способ, чтобы jq игнорировал эти строки? Кажется, я не могу найти решение. Я попытался использовать аргумент -seq, рекомендованный некоторыми людьми, но --seq игнорирует все строки в моем файле.Игнорировать Unparseable JSON с jq
ответ
Предполагая, что каждая запись в журнале ровно одна строка, вы можете использовать опцию -R
или --raw-input
сказать JQ, чтобы оставить линии неанализируемые, после чего вы можете предварять fromjson? |
к фильтру, чтобы JQ попытаться разобрать каждую строку в формате JSON и выбросить те, что ошибка.
Есть несколько 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.
Вопрос не в отдельных строках, которые невозможно разобрать. Речь идет об игнорировании или обходе строк с проблемами. Представьте, что у вас есть линия, которая только «123». – Brandon