我正在尝试在bash中生成一个json文件.我安装了jq,希望它能帮助我生成和附加json.
例如,我想以这种格式生成一个json:
{
"Project": [
{
"projectName": {
"branch": [
{
"branchName": [
"path"
]
}
],
"tag": [
{
"tagName": [
"path"
]
}
]
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
虽然可以像这样,使用以下过滤器
.Project=.Project+.Project+
[{"projectName" : {"branch" : (.branch+[{"branchName":(.tagName+["path"])}]),
"tag": (.tag+[{"tagName":(.tagName+["path"])}]) }}]
Run Code Online (Sandbox Code Playgroud)
当我想在同一个项目和名称中创建另一个条目时,它会创建一个全新的条目,如果它是一个新项目,则会产生以下结果:
{
"Project": [
{
"projectName": {
"branch": [
{
"branchName": [
"path"
]
}
],
"tag": [
{
"tagName": [
"path"
]
}
]
}
},
{
"projectName": {
"branch": [
{
"branchName": [
"path"
]
}
],
"tag": [
{
"tagName": [
"path"
]
}
]
}
},
{
"projectName": {
"branch": [
{
"branchName": [
"path2"
]
}
],
"tag": [
{
"tagName": [
"path2"
]
}
]
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
但我想拥有
{
"Project": [
{
"projectName": {
"branch": [
{
"branchName": [
"path",
"path2"
]
}
],
"tag": [
{
"tagName": [
"path",
"path2"
]
}
]
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
jq/bash有办法吗?
zer*_*iff 13
所以,我在黑暗中捅了一下(混合隐喻),但是这给出了你想要的结果:
cat test.json | jq '.Project[0].projectName.tag[0].tagName |= .+ ["path2"] | .Project[0].projectName.branch[0].branchName |= .+ ["path2"]'
Run Code Online (Sandbox Code Playgroud)
在|= .+ [...]本质上追加新的数组项.通过省略0from,例如,可以使用数组规范对所有数组元素产生良好的效果tag[0].
这会产生:
{
"Project": [
{
"projectName": {
"tag": [
{
"tagName": [
"path",
"path2"
]
}
],
"branch": [
{
"branchName": [
"path",
"path2"
]
}
]
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
编辑 - 如果我现在理解新方法(但我可能会遗漏某些东西),我们开始:
{
"Project": {
"projectName": {
"tag": {
"tagName": [
"path",
]
},
"branch": {
"branchName": [
"path",
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后设置一些变量并应用此变换:
Project=projectName ProjectNumber=path2 Branch=branchName Tag=tagName
jq ".Project.${Project}.tag.${Tag} |= .+ [\"${ProjectNumber}\"] | .Project.${Project}.branch.${Branch} |= .+ [\"${ProjectNumber}\"]"
Run Code Online (Sandbox Code Playgroud)
我们得到:
{
"Project": {
"projectName": {
"tag": {
"tagName": [
"path",
"path2"
]
},
"branch": {
"branchName": [
"path",
"path2"
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13424 次 |
| 最近记录: |