Ajouter json élément de tableau avec jq (cmdline)
Je suis en train de générer un fichier json à l'intérieur de bash. J'ai installé jq, en espérant que cela me permettrait de générer et ajouter json.
Par exemple, je veux générer un json dans ce format:
{
"Project": [
{
"projectName": {
"branch": [
{
"branchName": [
"path"
]
}
],
"tag": [
{
"tagName": [
"path"
]
}
]
}
}
]
}
Tandis qu'un peut de quelque chose comme ça, avec le filtre suivant
.Project=.Project+.Project+
[{"projectName" : {"branch" : (.branch+[{"branchName":(.tagName+["path"])}]),
"tag": (.tag+[{"tagName":(.tagName+["path"])}]) }}]
lorsque je veux créer une autre entrée dans le même projet et le nom, il crée une toute nouvelle entrée, si elle est un nouveau projet,
résultant de ce:
{
"Project": [
{
"projectName": {
"branch": [
{
"branchName": [
"path"
]
}
],
"tag": [
{
"tagName": [
"path"
]
}
]
}
},
{
"projectName": {
"branch": [
{
"branchName": [
"path"
]
}
],
"tag": [
{
"tagName": [
"path"
]
}
]
}
},
{
"projectName": {
"branch": [
{
"branchName": [
"path2"
]
}
],
"tag": [
{
"tagName": [
"path2"
]
}
]
}
}
]
}
Mais je voudrais avoir
{
"Project": [
{
"projectName": {
"branch": [
{
"branchName": [
"path",
"path2"
]
}
],
"tag": [
{
"tagName": [
"path",
"path2"
]
}
]
}
}
]
}
Est-il un moyen avec jq/bash?
Quel est le jq chaîne qui vous donne le mauvais résultat?
Vous êtes genenerating json à partir de quoi? Une structure de répertoire? Un fichier texte? D'autres json? À partir de rien? Quoi?
l'jq filtre que j'utilise. Projectname, BranchName, tagName sont variables que je dois souvent avoir la même valeur, le chemin va être différent à chaque exécution. En fait, cela est géré par un script pour exécuter une doxygen fichier mercurial repo. J'ai donc<m la construction de la docs, alors je veux faire une page qui vous permet de sélectionner la branche ou de l'étiquette voulait (comme la libération de la branche) et la version.
Vous êtes genenerating json à partir de quoi? Une structure de répertoire? Un fichier texte? D'autres json? À partir de rien? Quoi?
l'jq filtre que j'utilise. Projectname, BranchName, tagName sont variables que je dois souvent avoir la même valeur, le chemin va être différent à chaque exécution. En fait, cela est géré par un script pour exécuter une doxygen fichier mercurial repo. J'ai donc<m la construction de la docs, alors je veux faire une page qui vous permet de sélectionner la branche ou de l'étiquette voulait (comme la libération de la branche) et la version.
OriginalL'auteur Layfon Weller | 2014-08-20
Vous devez vous connecter pour publier un commentaire.
Donc, je vais prendre un coup de poignard dans le noir ici (à mélanger les métaphores), mais cela donne ce qui semble être les résultats que vous voulez:
La
|= .+ [...]
essentiellement ajoute un nouvel élément de tableau. Vous pouvez utiliser le tableau de spécifications pour le bon effet pour tous les éléments du tableau par l'omission de la0
, par exemple,tag[0]
.Ce produit:
Edit -- si j'ai bien compris la nouvelle méthode (mais j'ai peut être raté quelque chose), nous commençons avec:
Ensuite de fixer des variables et d'appliquer cette transformation:
Et nous obtenons:
J'ai utilisé ce filtre: jq ".Projet.${Projet}.la balise.${Tag} |= .+ [\"${ProjectNumber}\"] | .Projet.${Projet}.de la branche.${Branche} |= .+ [\"${ProjectNumber}\"]" /var/www/doc/version.json, il ne crée pas le résultat exact que je voulais, mais ce résultat est assez proche pour qu'il fasse ce que je veux. Ce n'est pas dans les tableaux.
OriginalL'auteur