curl http://testhost.test.com:8080/application/app/version | jq '.version' | jq '.[]'
Приведенная выше команда выводит только значения, указанные ниже:
"madireddy@test.com"
"2323"
"test"
"02-03-2014-13:41"
"application"
Как я могу получить имена клавиш, как показано ниже:
email
versionID
context
date
versionName
jq
?Ответы:
Ты можешь использовать:
ОБНОВЛЕНИЕ: чтобы создать массив BASH с использованием этих ключей:
Используя BASH 4+:
В старых версиях BASH вы можете:
Затем распечатайте:
источник
mapfile -t arr < <(jq -r 'keys[]' ms.json)
вместо этой уродливой подстановки процесса, чтобы избежать проблем с пробелами в ключах.arr=(); while IFS='' read -r line; do arr+=("$line"); done < <(...)
.keys_unsorted
получение ключей в порядке документов.Вам нужно использовать
jq 'keys[]'
. Например:Выводит список, разделенный строками:
источник
В сочетании с приведенным выше ответом вы хотите запросить у jq необработанный вывод, поэтому ваш последний фильтр должен быть, например:
Из справки jq:
источник
bash
сценарий - если вы не укажете,-r
вы получите строку в кавычках, которая отлично выглядит на экране, но вы обычно не хотите, чтобы кавычки были встроены в строку.Чтобы напечатать ключи в одной строке как csv:
Вывод:
Для полноты csv ... для печати значений в одной строке как csv:
Вывод:
источник
echo '{"ab": 1, "cd": 2}' | jq -r 'keys[]'
печатает все ключи по одному ключу в строке без кавычек.источник
Чтобы получить ключи на более глубоком узле в JSON:
источник
Вот еще один способ получить массив Bash с примером JSON, приведенным @anubhava в его ответе:
источник