web-dev-qa-db-fra.com

À l'aide de jq, convertissez un tableau d'objets en objet avec des clés nommées

Étant donné un fichier json au format:

[
 {
  name : "A",
  value : "1"
 },
 {
  name : "B",
  value : "5"
 },
 {
  name : "E",
  value : "8"
 }
]

Comment pourrais-je le convertir en quelque chose comme ça en utilisant jq:

{
 "A" : {
   name : "A",
   value : "1"
 },
 "B" : {
  name : "B",
  value : "5"
 },
 "E" : {
  name : "E",
  value : "8"
 }
}

jq '{(.[].name) : "the name"}' 'myfile.json' m'obtient un objet avec les touches [] .name mais comment puis-je lui assigner l'objet?

17
Mike N
map( { (.name|tostring): . } ) | add

(Le tostring est pour la sécurité/robustesse.)

INDEX/1

Si votre jq a INDEX/1 (introduit après la sortie de la version 1.5), vous pouvez simplement écrire:

INDEX(.name)
27
peak

Construisez simplement un nouvel objet en passant par les éléments du tableau. Ajoutez les éléments à l'objet avec name comme clé.

reduce .[] as $i ({}; .[$i.name] = $i)
13
Jeff Mercado