我使用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
最佳答案
以下过滤器应执行所需的更新:
(.git_namespaces[] | select(.name=="NamespaceY").modules) += ["moduleF"]
请注意,首字母“。|”不需要您的尝试; “ NamespaceY”在config.json中大写;所显示的是成功的关键;可以在这里使用+ =。
写回原始文件的一种方法可能是使用“海绵”。 jq常见问题解答https://github.com/stedolan/jq/wiki/FAQ上讨论了其他可能性