I'm trying to generate a json file within bash. I installed jq, hoping that it would help me generate and append json.
For example, I want to generate a json in this format:
{
"Project": [
{
"projectName": {
"branch": [
{
"branchName": [
"path"
]
}
],
"tag": [
{
"tagName": [
"path"
]
}
]
}
}
]
}
While a can to something like that, with the following filter
.Project=.Project+.Project+
[{"projectName" : {"branch" : (.branch+[{"branchName":(.tagName+["path"])}]),
"tag": (.tag+[{"tagName":(.tagName+["path"])}]) }}]
when I want to create another entry in the same project and name, it creates a whole new entry, has if it was a new project,
resulting in this:
{
"Project": [
{
"projectName": {
"branch": [
{
"branchName": [
"path"
]
}
],
"tag": [
{
"tagName": [
"path"
]
}
]
}
},
{
"projectName": {
"branch": [
{
"branchName": [
"path"
]
}
],
"tag": [
{
"tagName": [
"path"
]
}
]
}
},
{
"projectName": {
"branch": [
{
"branchName": [
"path2"
]
}
],
"tag": [
{
"tagName": [
"path2"
]
}
]
}
}
]
}
But I would like to have
{
"Project": [
{
"projectName": {
"branch": [
{
"branchName": [
"path",
"path2"
]
}
],
"tag": [
{
"tagName": [
"path",
"path2"
]
}
]
}
}
]
}
Is there a way with jq/bash?
Best Solution
So, I'm taking a stab in the dark here (to mix metaphors), but this gives what seems to be the results you want:
The
|= .+ [...]
essentially appends a new array item. You can use the array specs for good effect for all array elements by omitting the0
from, e.g.,tag[0]
.This produces:
Edit -- if I understand the new method now (but I could be missing something), we start with:
Then set some variables and apply this transform:
And we get: