Разделите несколько входных JSON с помощью jq - PullRequest
0 голосов
/ 27 ноября 2018

С учетом строки JSON

{"a":0,"b":{"c":"C"}}{"x":33}{"asd":889}

из 3 независимых объектов JSON.

И нужно обрабатывать их один за другим.Было бы неплохо иметь что-то вроде

echo "$json" | jq --first-one

Ожидаемый результат:

{"a":0,"b":{"c":"C"}}

Я нашел единственную команду, которая может удалить первый объект и вывести другие.inputs

echo '{"a":0,"b":{"c":"C"}}{"x":33}{"asd":889}' | jq -c inputs

вывод:

{"x":33}
{"asd":889}

Как читать только первый объект из входного потока и не трогать остальные объекты?

Обходной путь

При написании этого QI нашел обходной путь, но он выглядит громоздким

echo '{"a":0,"b":{"c":"C"}}{"x":33}{"asd":889}' | jq -c . | head -1

просто получить первую строку ...

1 Ответ

0 голосов
/ 27 ноября 2018

Как правило, следует избегать хлебопечения, если это возможно.Если ваш jq имеет input, вы можете просто написать:

echo '{"a":0,"b":{"c":"C"}}{"x":33}{"asd":889}' |
  jq -n input

Если ваш jq не имеет input, сейчас самое время перейти на jq 1.6.Если это не вариант, то обязательно используйте параметр -s, например jq -s '.[0]'

...