2017-09-22 4 views
0

Je simple tableau JSON:ajouter des valeurs à un tableau de clés avec JQ

[ 
"smoke-tests", 
"other-tests" 
] 

J'aimerais convertir à un simple JSON:

{"smoke-tests": true, 
"other-tests": true 
} 

J'ai essayé plusieurs exemples de , mais aucun ne semble faire ce que je veux.

jq '.[] | walk(.key = true)' génère une erreur de compilation.

Répondre

1

Si vous aimez l'efficacité de reduce mais ne veulent pas utiliser reduce explicitement:

. as $in | {} | .[$in[]] = true 
+0

Merci, @peak; Élégant et simple. – AG6HQ

0

Avec fonction reduce():

jq 'reduce .[] as $k ({}; .[$k]=true)' file 

La sortie:

{ 
    "smoke-tests": true, 
    "other-tests": true 
} 
1
$ s='["smoke-tests", "other-tests"]' 
$ jq '[.[] | {(.): true}] | add' <<<"$s" 
{ 
    "smoke-tests": true, 
    "other-tests": true 
} 

Décomposer comment cela fonctionne: .[] | {(.): true} convertit chaque élément dans un dictionnaire en correspondance la valeur (une clé) pour true. Entourant que [ ] signifie que nous générons une liste de tels objets; envoyant cela à add les combine en un seul objet.

1

Voici une solution à l'aide ajouter. Il est proche de la solution Charles mais utilise le comportement Object construction pour renvoyer implicitement plusieurs objets lorsqu'il est utilisé avec une expression qui renvoie plusieurs résultats.

[{(.[]):true}]|add