如何使用jq更新json文件中的子项?

时间:2017-04-03 08:54:41

标签: json updates jq

使用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

1 个答案:

答案 0 :(得分:1)

以下过滤器应执行所需的更新:

(.git_namespaces[] | select(.name=="NamespaceY").modules) += ["moduleF"]

注意最初的'。|'在你的尝试中不需要; “NamespaceY”在config.json中大写;所显示的parens是成功的关键;并且+ =可以在这里使用。

回写原始文件的一种方法可能是使用'海绵';其他可能性在jq常见问题https://github.com/stedolan/jq/wiki/FAQ

上讨论