Pelo que entendi, você está procurando pelo valor de "Foo". Isso é realmente fácil de fazer com a ferramenta de linha de comando shell jq
. É algo como sed
em que implementa seu próprio tipo de linguagem analisadora. Dado o seu exemplo:
json='
{
"Reservations" :
{
"OwnerId" : "1345345",
"Groups" : [],
"SecurityGroups" : [
{
"Foo" : "yes",
"Bar" : "no"
}
]
}
}'
jq
pode obter yes
como simplesmente:
printf %s "$json" |
jq '.[].SecurityGroups[0].Foo?'
OUTPUT
"yes"
Você pode percorrer um hash de objetos ou uma lista de dicionários usando a notação .dot
, e as matrizes indexadas podem ser indexadas de maneira mais simples, com, como você provavelmente adivinhou, índices numéricos com colchetes retos. No comando acima, eu uso o formulário de índice vazio para indicar que quero que todos os itens iteráveis desse nível sejam expandidos. Isso pode ser mais fácil de entender dessa maneira:
printf %s "$json" | jq '.[][]'
... que quebra todos os valores para os itens do segundo nível no hash e me pega ...
"1345345"
[]
[
{
"Foo": "yes",
"Bar": "no"
}
]
Isso apenas arranha a superfície com relação às capacidades do jq
. É uma ferramenta imensamente poderosa para serializar dados no shell, ele compila para um único binário executável no estilo Unix clássico, é muito provável que ele esteja disponível via gerenciador de pacotes para sua distribuição, e está muito bem documentado. Visite a git
-page e veja você mesmo.
A propósito, outra maneira de lidar com dados em camadas em json
- pelo menos para ter uma ideia do que você está trabalhando - pode ser ir para o outro lado e usar a notação .dot
para sair todos valores em todos níveis como:
printf %s "$json" | jq '..'
{
"Reservations": {
"OwnerId": "1345345",
"Groups": [],
"SecurityGroups": [
{
"Foo": "yes",
"Bar": "no"
}
]
}
}
{
"OwnerId": "1345345",
"Groups": [],
"SecurityGroups": [
{
"Foo": "yes",
"Bar": "no"
}
]
}
"1345345"
[]
[
{
"Foo": "yes",
"Bar": "no"
}
]
{
"Foo": "yes",
"Bar": "no"
}
"yes"
"no"
Mas muito melhor, provavelmente, seria apenas usar um dos muitos métodos de busca ou descoberta que o jq
oferece para os vários tipos de nós.