curl http://testhost.test.com:8080/application/app/version | jq '.version' | jq '.[]'
O comando acima gera apenas os valores abaixo:
"[email protected]"
"2323"
"test"
"02-03-2014-13:41"
"application"
Como posso obter os nomes das chaves, como abaixo:
email
versionID
context
date
versionName
jq
?Respostas:
Você pode usar:
ATUALIZAÇÃO: Para criar uma matriz BASH usando estas chaves:
Usando o BASH 4+:
No BASH mais antigo, você pode:
Depois imprima:
fonte
mapfile -t arr < <(jq -r 'keys[]' ms.json)
vez da substituição feia do processo para evitar problemas com espaços nas chaves.arr=(); while IFS='' read -r line; do arr+=("$line"); done < <(...)
também fará.keys_unsorted
para obter as chaves na ordem dos documentos.Você precisa usar
jq 'keys[]'
. Por exemplo:Produzirá uma lista separada por linhas:
fonte
Em combinação com a resposta acima, você deseja solicitar ao jq a saída bruta, portanto seu último filtro deve ser, por exemplo:
Da ajuda jq:
fonte
bash
script - se você não especificar-r
, obterá uma string entre aspas, que fica bem na tela, mas geralmente não deseja que as aspas sejam incorporadas na string.Para imprimir chaves em uma linha como csv:
Resultado:
Para que a integridade do csv ... imprima valores em uma linha como csv:
Resultado:
fonte
echo '{"ab": 1, "cd": 2}' | jq -r 'keys[]'
imprime todas as teclas uma tecla por linha sem aspas.fonte
Para obter as chaves em um nó mais profundo em um JSON:
fonte
Aqui está outra maneira de obter uma matriz Bash com o exemplo JSON fornecido por @anubhava em sua resposta:
fonte