Как я могу распечатать JSON в командной строке, но разрешить прохождение недействительных JSON объектов? - PullRequest
1 голос
/ 31 марта 2020

В настоящее время я хожу в несколько журналов в bash, которые наполовину JSON, наполовину текст, как показано ниже:

{"response":{"message":"asdfasdf"}}

{"log":{"example":"asdfasdf"}}

here is some text

{"another":{"example":"asdfasdf"}}

more text

Каждая строка является либо полным действительным JSON объектом, либо некоторым текстом, который не сможет выполнить синтаксический анализатор JSON.

Я посмотрел на jq и underscore-cli, чтобы посмотреть, есть ли у них варианты возврата недопустимого объекта в случае сбоя, но я не вижу никаких .

Я также пытался использовать оператор || для отслеживания переданного по трубопроводу ввода, но я как-то теряю значение. Может, мне стоит больше читать по трубам? Пример: getLogs -t | (underscore print || cat)

Я думаю, я мог бы написать скрипт, который хранит входные данные. Отформатируйте его и верните результат в случае успеха. Если это не удалось, вернули сохраненное значение. Я чувствую, что должен быть более простой способ, хотя. Есть мысли?

Ответы [ 2 ]

1 голос
/ 31 марта 2020

может проверить недействительным json

#!/bin/bash
while read p; do
    if jq -e . >/dev/null 2>&1 <<<"$p"; then
        echo $p | jq
    else
        echo 'Skipping invalid json'
    fi
done < /tmp/tst.txt

{
  "response": {
    "message": "asdfasdf"
  }
}
{
  "log": {
    "example": "asdfasdf"
  }
}
Skipping invalid json
{
  "another": {
    "example": "asdfasdf"
  }
}
Skipping invalid json
1 голос
/ 31 марта 2020

Вы можете использовать эту библиотеку узлов

установить с

$ npm install -g js-beautify

Вот что я сделал:

$ js-beautify -r test.js
beautified test.js

Я проверил это с неполным json файлом и все заработало

...