web-dev-qa-db-fra.com

Utilisation de jq pour récupérer la valeur de clé de la sortie json

J'ai un fichier qui ressemble à ci-dessous:

{
  "repositories": [
   {
    "id": "156c48fc-f208-43e8-a631-4d12deb89fa4",
    "namespace": "rhel12",
    "namespaceType": "organization",
    "name": "rhel6.6",
    "shortDescription": "",
    "visibility": "public"
   },
   {
    "id": "f359b5d2-cb3a-4bb3-8aff-d879d51f1a04",
    "namespace": "rhel12",
    "namespaceType": "organization",
    "name": "rhel7",
    "shortDescription": "",
    "visibility": "public"
   }
  ]
 }

Je souhaite obtenir uniquement des valeurs de nom avec chacune d’elles dans une nouvelle ligne afin de pouvoir utiliser while read -r line

rhel6.6 
rhel7

J'utilise jq comme suit, ce qui ne semble pas fonctionner:

jq -r '.[].name'

S'il vous plaît suggérer l'utilisation correcte de jq ici

8
meallhour

Vous devez combiner les filtres à l'aide de l'opérateur |:

$ jq -r '.[] | .[] | .name' test.json 
rhel6.6
rhel7

Le premier .[] extrait le tableau repositories. Le prochain .[] récupère tous les éléments du tableau repositories. Finalement, .name extrait les propriétés des éléments du tableau (objets).

Remarque, le premier .[] fonctionne sur l'objet car il s'agit d'une fonctionnalité documentée:

.[]
    If you use the .[index] syntax, but omit the index entirely, it
    will return all of the elements of an array...

    You can also use this on an object, and it will return all the
    values of the object.
11
Ruslan Osmanov

Vous voulez regarder le tableau de référentiels au lieu de traiter l'entrée comme un tableau:

$ jq -r '.repositories[].name' file
rhel6.6
rhel7
12
that other guy

Voici une autre solution. Assumer les exigences

Je veux obtenir uniquement des valeurs de nom avec chacune d'elles dans une nouvelle ligne afin de pouvoir utiliser la ligne read -r. 

Pouvez-vous s'il vous plaît comment puis-je obtenir la sortie au format rhel12/rhel6.6 En d'autres termes, j'ai besoin o/p au format namespace/name

si les données sont en data.json alors la commande

jq -M -r '.repositories[] | "\(.namespace)/\(.name)"' data.json

devrait produire

rhel12/rhel6.6
rhel12/rhel7
0
jq170727