如何使用jq更新json文件中的子项?
问题描述:
使用jq
我想这个JSON文档更新:如何使用jq更新json文件中的子项?
{
"git_defaults": {
"branch": "master",
"email": "[email protected]",
"user": "Jenkins"
},
"git_namespaces": [
{
"name": "NamespaceX",
"modules": [
"moduleA",
"moduleB",
"moduleC",
"moduleD"
]
},
{
"name": "NamespaceY",
"modules": [
"moduleE"
]
}
]
}
与添加moduleF
到NamespaceY
。我需要将文件重新写回原始源文件。
我差点(但没有雪茄)有:
jq '. | .git_namespaces[] | select(.name=="namespaceY").modules |= (.+ ["moduleF"])' config.json
和
jq '. | select(.git_namespaces[].name=="namespaceY").modules |= (.+ ["moduleF"])' config.json
答
以下过滤器应执行所需的更新:
(.git_namespaces[] | select(.name=="NamespaceY").modules) += ["moduleF"]
注意初始'|'。在你的尝试中是不需要的; “NamespaceY”在config.json中大写;如图所示的父母是成功的关键;那里可以使用+ =。
写回原始文件的一种方法可能是使用'海绵';其他可能性在jq上讨论常见问题解答https://github.com/stedolan/jq/wiki/FAQ
我花了一点时间: (.git_namespaces [] | select(.name ==“NamespaceY”)。modules)| =(。+ [“moduleF”] | unique) 以确保它不会导致重复输入 – MansM