web-dev-qa-db-fra.com

Extraire un champ spécifique de la sortie JSON à l'aide de jq

J'ai une sortie JSON comme suit:

{
  "example": {
    "sub-example": [
      {
        "name": "123-345",
        "tag" : 100
      },
      {
        "name": "234-456",
        "tag" : 100
      },
      {
        "name": "4a7-a07a5",
        "tag" : 100
      }
    ]
  }
}

Je veux extraire les valeurs des trois champs "name" et les stocker dans trois variables.

J'ai essayé cat json_file | jq '.["example.sub-example.name"]' pour extraire la valeur du champ "name" mais cela ne fonctionne pas.

Quelqu'un peut-il me dire comment y parvenir en utilisant jq (ou une autre méthode)?

36
rmb

Si vous voulez seulement extraire les champs name, la commande que vous recherchez est jq '.example."sub-example" | .[] | .name'. Si vous souhaitez conserver les noms dans un tableau, placez l'expression jq entière entre crochets.

40
aaaaaa123456789

Dans jq 1.3, vous pouvez utiliser le filtre:

.example["sub-example"] | .[] | .name

Ou plus compactement:

.example["sub-example"][].name

Bien entendu, ceux-ci fonctionnent également avec les versions ultérieures de jq.

14
peak