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.