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
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.
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
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