Как извлечь поля из строки json, используя jq - PullRequest
1 голос
/ 04 июня 2019

Как извлечь два поля из файла JSON с помощью jq?

Когда я запускаю 'jq' .node 'out.json, я получаю слово' null 'в выводе

Вот что у меня есть в файле с именем out.json

head out.json 
{ "items": [ {"node":"aaaa-cn001.me.com","status":"success","result":{"stdout":"3.10.0-957.12.1.el7.x86_64\n","stderr":"","exit_code":0}} , {"node":"aaaa-cn002.me.com","status":"success","result":{"stdout":"3.10.0-957.10.1.el7.x86_64\n","stderr":"","exit_code":0}} , {"node":"aaaa-cn003.me.com","status":"success","result":{"stdout":"3.10.0-957.10.1.el7.x86_64\n","stderr":"","exit_code":0}} , {"node":"aaaa-cn004.me.com","status":"success","result":{"stdout":"3.10.0-957.12.1.el7.x86_64\n","stderr":"","exit_code":0}}

Я бы хотел, чтобы вывод был таким:

aaaa-cn001.me.com 3.10.0-957.12.1.el7.x86_64
aaaa-cn002.me.com 3.10.0-957.10.1.el7.x86_64
aaaa-cn003.me.com 3.10.0-957.10.1.el7.x86_64
aaaa-cn004.me.com 3.10.0-957.12.1.el7.x86_64

Ответы [ 2 ]

5 голосов
/ 04 июня 2019

Похоже, вы хотите следующее:

jq --raw-output '.items[] | .node + " " + .result.stdout' out.json

Вы можете попробовать здесь

1 голос
/ 04 июня 2019

, если вы заинтересованы в альтернативном решении, есть еще один способ достижения того же - с помощью утилиты Unix на основе пешеходной дорожки jtc:

bash $ <out.json jtc -w'[items][:][node]<n>v[-1][result][stdout]' -T'"{n} {}"' -qq
aaaa-cn001.me.com 3.10.0-957.12.1.el7.x86_64

aaaa-cn002.me.com 3.10.0-957.10.1.el7.x86_64

aaaa-cn003.me.com 3.10.0-957.10.1.el7.x86_64

aaaa-cn004.me.com 3.10.0-957.12.1.el7.x86_64

bash $ 

Обратите внимание, здесь возникает дополнительная строка, потому что stdout значения содержат завершающий \n, что после удаления строки JSON (-qq) без кавычек приводит к дополнительному разделителю.

Если вы хотите печатать без сохранения этой строки, используйте эту форму:

bash $ <out.json jtc -w'[items][:][node]<n>v[-1][result][stdout]:<(.*)\\n>R' -T'"{n} {$1}"' -qq
aaaa-cn001.me.com 3.10.0-957.12.1.el7.x86_64
aaaa-cn002.me.com 3.10.0-957.10.1.el7.x86_64
aaaa-cn003.me.com 3.10.0-957.10.1.el7.x86_64
aaaa-cn004.me.com 3.10.0-957.12.1.el7.x86_64
bash $ 

PS> Раскрытие информации: я создатель jtc - оболочки cli для операций JSON

...