2017-04-03 60 views
3

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

回答

1

以下過濾器應執行所需的更新:

(.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