Eu tenho a seguinte estrutura ( exemplo de arquivo completo aqui ):
{
{
"weather": [
{
"advertiser": "Worldwide Forecasts",
"notificationText": "Weather - Check the Weather Now - Weather",
"notificationURL": "http://www.worldwideforecasts.com/b/index.html?aff_sub=NL01R15178755321634q5X2zHqXo1976US&utm_term=weather&utm_campaign=bing&utm_content=new-weather%20-%20Weather%20-%202&utm_medium=Search_SEM&utm_source=7&nlhash=BR6et8ISl5dCdAHF&requestId=NL01R15178755321634q5X2zHqXo1976US",
"uuid": "9f27d258-f9d5-4b19-9f70-291eb9cbab51",
"creativeSetId": "2799cbab-1fa1-4f15-bbc9-c92381dbfc57"
},
{
"advertiser": "Worldwide Forecasts",
"notificationText": "Weather - Check the Weather Now - Weather",
"notificationURL": "http://www.worldwideforecasts.com/b/index.html?aff_sub=NL01R15178755321634q5X2zHqXo1976US&utm_term=weather&utm_campaign=bing&utm_content=new-weather%20-%20Weather%20-%202&utm_medium=Search_SEM&utm_source=7&nlhash=BR6et8ISl5dCdAHF&requestId=NL01R15178755321634q5X2zHqXo1976US",
"uuid": "9f27d258-f9d5-4b19-9f70-291eb9cbab51",
"creativeSetId": "2799cbab-1fa1-4f15-bbc9-c92381dbfc57"
}
]
}
}
Com várias categorias como o weather
exemplo.
Quero usar jq
para obter uma lista de todos os valores de notificationURL
para que fique com uma lista de URLs de todos os anunciantes.
Eu estava inicialmente pensando que poderia fazer algo como:
cat file.json | jq .[].[].notificationURL
Mas isso não funciona.
Você tem duas opções básicas aqui (com seu arquivo completo):
Na primeira, você aplica a
[]
operação duas vezes seguidas, e na segunda você compõe dois filtros separados junto com o operador de pipe. Acho que usar pipes extras é muito mais fácil de trabalhar e depurar, mas ambos são idênticos para o seu propósito..[]
a iteração genérica sempre se aplica ao valor de entrada único dessa iteração, portanto, deve ser o primeiro elemento em uma expressão e é um erro de sintaxe em qualquer outro lugar, mas[]
aplicado a um valor específico ao lado esquerdo está bem em qualquer lugar.O próprio fato de que você pode escrever
abc[]
nada, em vez de apenas.[]
, não está bem descrito na documentação do jq, mas você pode. Você pode pensar.[]
em aplicar[]
ao filtro de identidade.
, embora eu ache que seja realmente um caso especial.Neste caso exato, você pode reduzi-lo para:
que aplica a operação do iterador três vezes seguidas, pois há apenas uma "categoria" de chave no objeto de nível superior.