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

标签 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

最佳答案

以下过滤器应该执行您想要的更新:

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

注意首字母 '.|'在您的尝试中不需要; “NamespaceY”在 config.json 中大写;如图所示的 parent 是成功的关键; += 可以在这里使用。

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

关于json - 如何使用 jq 更新 json 文件中的子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43180340/

相关文章:

java - 使用 Jackson 反序列化时防止 float 到 int 的转换

ios - 通过解析JSON创建Class对象数组- SwiftyJSON

linux - 如何在 Debian Linux 中将 Clang 编译器从版本 3.1 更新到版本 3.4?

docker - 为什么docker运行时说Unknown操作数而同一shell脚本在ubuntu机器中完美运行

json - 在 Bash 中有效地将 JSON 文件重写为 CSV

javascript - 检查对象数组是否已更改

jquery - "Walk"JSON 响应和填充表单字段——更有效的方法?

c++ - 更新 Vector 中对象的属性

ios - Swift 2.3 在 pod 更新后使用未解析的标识符 Firebase 'FIR'

json - 日志中嵌套字符串化 json 的 pretty-print