我使用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上讨论了其他可能性

10-04 18:00