您能提示一下如何通过 jq 在数组对象中间插入新元素吗?
1.json 文件:-
[ {
"name": "Dependencies",
"asyncInstallation": false,
"failOnError": true,
"yamls": [
"dependency.yaml",
]
},
{
"name": "Management Configuration",
"asyncInstallation": false,
"failOnError": true,
"yamls": [
"mgmt-job.yaml"
]
},
{
"name": "Data Configuration",
"asyncInstallation": false,
"failOnError": true,
"yamls": [
"data-job.yaml"
]
},
{
"name": "Tools",
"asyncInstallation": true,
"failOnError": false,
"yamls": [
"tools-job.yaml"
]
}
]
Run Code Online (Sandbox Code Playgroud)
我想在管理配置后插入以下文本。
{
"name": "NEW Configuration",
"asyncInstallation": false,
"failOnError": true,
"yamls": [
"newfile.yaml"
]
},
Run Code Online (Sandbox Code Playgroud)
您能否建议我们如何使用 jq 或 sed 来做?
谢谢萨拉瓦南
首先,假设我们知道名称为“管理配置”的对象的索引是 $i。然后,假设要插入的对象是$o,我们会这样写:
.[0:$i+1] + [$o] + .[$i+1:]
Run Code Online (Sandbox Code Playgroud)
因此,任务归结为找到 $i,这可以有效地完成,如下所示:
first(range(0;length) as $i
| select(.[$i].name=="Management Configuration")
| $i)
Run Code Online (Sandbox Code Playgroud)
小心确保我们处理了我们期望的对象没有出现在数组中的可能性,我们可以将各个部分组合在一起,如下所示:
(first(range(0;length) as $i
| select(.[$i].name=="Management Configuration")
| $i) // null) as $i
| if $i then .[0:$i+1] + [$o] + .[$i+1:] else . end
Run Code Online (Sandbox Code Playgroud)
一种设置方法$o是在命令行上,例如:
jq --argjson o '....' -f insert.jq 1.json
Run Code Online (Sandbox Code Playgroud)
使用以下通用定义可能有意义:
def indexof(f):
first(range(0;length) as $i
| select(.[$i]|f) | $i) // null;
Run Code Online (Sandbox Code Playgroud)
那么解决方案就变成了:
indexof(.name=="Management Configuration") as $i
| if $i then .[0:$i+1] + [$o] + .[$i+1:] else . end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
704 次 |
| 最近记录: |