使用jq
我尝试更新此json文档:
{
"git_defaults": {
"branch": "master",
"email": "jenkins@host",
"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
答案 0 :(得分:1)
以下过滤器应执行所需的更新:
(.git_namespaces[] | select(.name=="NamespaceY").modules) += ["moduleF"]
注意最初的'。|'在你的尝试中不需要; “NamespaceY”在config.json中大写;所显示的parens是成功的关键;并且+ =可以在这里使用。
回写原始文件的一种方法可能是使用'海绵';其他可能性在jq常见问题https://github.com/stedolan/jq/wiki/FAQ
上讨论