2017-10-04 4 views
2

Comment puis-je extraire tous les noms de clé, même dans les objets imbriqués avec jq? Par exemple, je JSON:Comment extraire tous les noms de clés (également imbriqués) avec jq

{ "a": 1, "b": { "c": 2 } }

et je veux obtenir la liste: a, b, bc

Je sais que pour les clés de haut niveau que je peux obtenir ce, avec: . | to_entries[] | .key , mais qu'en est-il des clés dans les objets imbriqués?

Répondre

2

court solution jq:

jq -r '[paths | join(".")]' jsonfile 

La sortie:

[ 
    "a", 
    "b", 
    "b.c" 
] 

  • fonction paths délivre en sortie les chemins vers tous les éléments de son entrée

  • join(".") - concaténer clés dans les voies hiérarchiques

+1

Wow, il est si simple, je suis heureux, que je l'ai demandé, merci. J'ajouterai seulement cela pour éviter les erreurs: "string (". ") Et number (0) ne peuvent pas être ajoutés" quand il y a un tableau dans json on devrait ajouter un mapping à une chaîne: 'paths | map (. | tostring) | join (".") ' – wjtk

+0

@wjtk, de rien – RomanPerekhrest