2017-08-23 4 views

Répondre

2

C'est un peu difficile, car vous devez intégrer l'entrée dans la liste liée à la clé errands. Commencez par créer la séquence de name/post_deploy objets:

% jq '.[] | {name: ., post_deploy: true}' names.json 
{ 
    "name": "smoke-tests", 
    "post_deploy": true 
} 
{ 
    "name": "push-apps-manager", 
    "post_deploy": true 
} 

Enrouler ensuite que dans la liste de l'objet externe:

% jq '{errands: [.[] | {name: ., post_deploy: true}]}' names.json 
{ 
    "errands": [ 
    { 
     "name": "smoke-tests", 
     "post_deploy": true 
    }, 
    { 
     "name": "push-apps-manager", 
     "post_deploy": true 
    } 
    ] 
} 

Vous pouvez également utiliser la fonction map (dont je me souviens rarement comment utiliser correctement, mais il s'avère que c'est assez simple ici):

% jq '{errands: map({name:., post_deploy: true})}' names.json 
+0

100% impressionnant! maintenant, quelle méthode utiliser? Honnêtement, j'aime la méthode de la carte, je vais aller avec ça. – AG6HQ

+0

Probablement 'map'; pour être honnête, en regardant de plus près la page de manuel, j'ai involontairement réimplémenté 'map' avec ma première solution. ('map' est * défini * comme' [. [] | x] '.) – chepner

1

Voici une autre approche. Si vous êtes nouveau à jq il peut être plus facile de travailler vers l'objectif en petites étapes.

1) commencer avec le filtre ayant une identité

. 

qui produit comme prévu

[ 
    "smoke-tests", 
    "push-apps-manager" 
] 

2) ajouter ensuite l'objet externe avec le "errands" clé:

{ "errands": . } 

qui produit

{ 
    "errands": [ 
    "smoke-tests", 
    "push-apps-manager" 
    ] 
}  

3) se déplacent suivant les données dans un tableau

{ "errands": [ . ] } 

qui produit

{ 
    "errands": [ 
    [ 
     "smoke-tests", 
     "push-apps-manager" 
    ] 
    ] 
} 

4) ajouter l'objet interne avec les "name" et "post_deploy" touches

{ "errands": [ { "name": ., "post_deploy": true } ] } 

qui produit

{ 
    "errands": [ 
    { 
     "name": [ 
     "smoke-tests", 
     "push-apps-manager" 
     ], 
     "post_deploy": true 
    } 
    ] 
} 

5) Maintenant, nous sommes vraiment proches. Tout ce que nous devons faire est de tirer parti des de de Object Construction behavior when an expression produces multiple results:

{ "errands": [ { "name": .[], "post_deploy": true } ] } 

qui nous donne le résultat souhaité

{ 
    "errands": [ 
    { 
     "name": "smoke-tests", 
     "post_deploy": true 
    }, 
    { 
     "name": "push-apps-manager", 
     "post_deploy": true 
    } 
    ] 
} 
+0

Génial! Merci pour le conseil... – AG6HQ