curl http://testhost.test.com:8080/application/app/version | jq '.version' | jq '.[]'
Powyższe polecenie wyprowadza tylko wartości jak poniżej:
"[email protected]"
"2323"
"test"
"02-03-2014-13:41"
"application"
Jak mogę uzyskać nazwy kluczy zamiast, jak poniżej:
email
versionID
context
date
versionName
jq
?Odpowiedzi:
Możesz użyć:
UPDATE: Aby utworzyć tablicę BASH za pomocą tych kluczy:
Korzystanie z BASH 4+:
Na starszym BASH możesz:
Następnie wydrukuj:
źródło
mapfile -t arr < <(jq -r 'keys[]' ms.json)
zamiast tego brzydkiego podstawiania procesów, aby uniknąć problemów ze spacjami w klawiszach.arr=(); while IFS='' read -r line; do arr+=("$line"); done < <(...)
również się nada.keys_unsorted
o zdobyciu kluczy w kolejności dokumentów.Musisz użyć
jq 'keys[]'
. Na przykład:Wyświetli listę oddzieloną wierszami:
źródło
W połączeniu z powyższą odpowiedzią chcesz zapytać jq o surowe dane wyjściowe, więc ostatnim filtrem powinien być np .:
Z pomocy jq:
źródło
bash
skrypt - jeśli nie podasz-r
, otrzymasz ciąg znaków w cudzysłowie, który wygląda dobrze na ekranie, ale zwykle nie chcesz, aby cudzysłowy były osadzone w ciągu.Aby wydrukować klucze w jednej linii jako csv:
Wynik:
Aby uzyskać kompletność csv ... aby wydrukować wartości w jednym wierszu jako csv:
Wynik:
źródło
echo '{"ab": 1, "cd": 2}' | jq -r 'keys[]'
wypisuje wszystkie klucze po jednym kluczu w wierszu bez cudzysłowów.źródło
Aby uzyskać klucze w głębszym węźle w JSON:
źródło
Oto inny sposób uzyskania tablicy Bash z przykładem JSON podanym przez @anubhava w jego odpowiedzi:
źródło