web-dev-qa-db-fra.com

jq: impossible d'indexer un tableau avec une chaîne

J'ai le suivant dans un fichier (que j'appellerai "mon fichier"):

[{
    "id": 123,
    "name": "John",
    "aux": [{
        "abc": "random",
        "def": "I want this"
    }],
    "blah": 23.11
}]

Je peux l'analyser sans le [ et ] comme suit:

$ cat myfile | jq -r '.aux[] | .def'
I want this
$

mais avec le [ et ] Je reçois:

$ cat myfile | jq -r '.aux[] | .def'
jq: error: Cannot index array with string

Comment puis-je traiter avec le [ et ] en utilisant jq? (Je suis sûr que je pourrais les analyser avec un outil différent, mais je veux apprendre comment utiliser correctement jq.

30
Xu Wang

CA devrait etre:

jq '.[].aux[].def' file.json

.[] itère sur le tableau externe, .aux[] _ puis itère sur le tableau aux de chaque noeud et .def imprime leur .def propriété.

Cela produira:

"I want this"

Si vous voulez vous débarrasser des guillemets doubles, passez -r (--raw) à jq:

jq -r '.[].aux[].def' file.json

Sortie:

I want this
58
hek2mgl