Ajouter un nouvel élément à un tableau JSON existant en utilisant jq
J'ai un fichier json et je veux ajouter un nouvel objet array. Je suis en train d'utiliser jq ligne de commande. Comme je cherchais à internet cette commande est à faire, pas seulement pour les objets de requête au fichier Json. Mais je ne peux pas comprendre comment utiliser la commande AJOUTER jq.
Mon fichier Json est le rapport-2017-01-07.json >>
{
"report":"1.0",
"data":{
"date":"2010-01-07",
"messages":[
{
"date":"2010-01-07T19:58:42.949Z",
"xml":"xml_samplesheet_2017_01_07_run_09.xml",
"status":"OK",
"message":"metadata loaded into iRODS successfully"
},
{
"date":"2010-01-07T20:22:46.949Z",
"xml":"xml_samplesheet_2017_01_07_run_09.xml",
"status":"NOK",
"message":"metadata duplicated into iRODS"
},
{
"date":"2010-01-07T22:11:55.949Z",
"xml":"xml_samplesheet_2017_01_07_run_09.xml",
"status":"NOK",
"message":"metadata was not validated by XSD schema"
}
]
}
}
Je suis l'aide de la commande ci-dessous >>
$ cat report-2017-01-07.json | jq -s '.data.messages {"date": "2010-01-07T19:55:99.999Z", "xml": "xml_samplesheet_2017_01_07_run_09.xml", "status": "OKKK", "message": "metadata loaded into iRODS successfullyyyyy"}'
jq: error: syntax error, unexpected '{', expecting $end (Unix shell quoting issues?) at <top-level>, line 1:
.data.messages {"date": "2010-01-07T19:55:99.999Z", "xml": "xml_samplesheet_2017_01_07_run_09.xml", "status": "OKKK", "message": "metadata loaded into iRODS successfullyyyyy"}
jq: 1 compile error
J'ai déjà essayé une autre commandes combinaison, mais je suis toujours à la fin avec l'erreur de compilation. Toute allusion à ce sujet?
Merci!
la sortie doit ressembler >>
{
"report": "1.0",
"data": {
"date": "2010-01-07",
"messages": [{
"date": "2010-01-07T19:58:42.949Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "OK",
"message": "metadata loaded into iRODS successfully"
}, {
"date": "2010-01-07T20:22:46.949Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "NOK",
"message": "metadata duplicated into iRODS"
}, {
"date": "2010-01-07T22:11:55.949Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "NOK",
"message": "metadata was not validated by XSD schema"
}, {
"date": "2010-01-07T19:55:99.999Z",
"xml": "xml_samplesheet_2017_01_07_run_09.xml",
"status": "OKKKKKKK",
"message": "metadata loaded into iRODS successfullyyyyy"
}]
}
}
source d'informationauteur Felipe Oliveira Gutierrez
Vous devez vous connecter pour publier un commentaire.
La
|= .+
partie dans le filtre ajoute un nouvel élément à l'ensemble existant. Vous pouvez utiliser lejq
avec filtrePour éviter l'utilisation de la codé en dur la valeur de la longueur de
3
et dynamiquement ajouter un nouvel élément, utilisez. | length
qui retourne la longueur, qui peut être utilisé comme le prochain tableau d'index, c'est à dire(ou) conformément à la pointe de la suggestion dans les commentaires, à l'aide de la
+=
opérateur seulqui produit la sortie que vous en avez besoin.
Utilisation jq-play à sec exécuter votre
jq-filter
et optimiser quelle que soit la façon dont vous le souhaitez.Plutôt que d'utiliser
|=
ici, il est beaucoup mieux d'utiliser+=
:Ajouter
D'autre part, si (comme @NicHuang demandé) que vous voulez ajouter l'objet JSON pour le début du tableau, vous pouvez utiliser le modèle: