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

问题描述:

使用jq我想这个JSON文档更新:如何使用jq更新json文件中的子项?

{ 
"git_defaults": { 
    "branch": "master", 
    "email": "[email protected]", 
    "user": "Jenkins" 
}, 
"git_namespaces": [ 
{ 
    "name": "NamespaceX", 
     "modules": [ 
      "moduleA", 
      "moduleB", 
      "moduleC", 
      "moduleD" 
     ] 
}, 
{ 
    "name": "NamespaceY", 
    "modules": [ 
     "moduleE" 
    ] 
} 
] 
} 

与添加moduleFNamespaceY。我需要将文件重新写回原始源文件。

我差点(但没有雪茄)有:

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

+0

我花了一点时间: (.git_namespaces [] | select(.name ==“NamespaceY”)。modules)| =(。+ [“moduleF”] | unique) 以确保它不会导致重复输入 – MansM