温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Update field inside a nested JSON object based on key using jq
json jq

其他 - 使用jq根据键更新嵌套JSON对象内的字段

发布于 2020-03-27 11:47:37

我有以下格式的json文件

{
    "l1":"",
    "values":{
        "id1":{
            "name":"abc",
            "enabled":"true"

        },
        "id2":{
            "name":"def",
            "enabled":"true"
        },
        "id3":{
            "name":"jjj"
        }
    }
}

我想基于父键添加/更新json对象的启用状态。所以,例如:我有一个下面内容的文件。

id1 false
id2 true
id3 false
id4 false

我希望我的输出如下所示:

{
    "l1":"",
    "values":{
        "id1":{
            "name":"abc",
            "enabled":"false"

        },
        "id2":{
            "name":"def",
            "enabled":"true"
        },
        "id3":{
            "name":"jjj",
            "enabled":"false"
        }
    }
}

jq版本:1.5

查看更多

查看更多

提问者
dks551
被浏览
91
Jeff Mercado 2019-07-03 16:06

您可以只创建要更新的ID和更新值的映射。然后使用该映射更新相应的值。

$ jq --argjson m '{"id1":"false","id2":"true","id3":"false","id4":"false"}' '
.values |= with_entries(.value.enabled = $m[.key])
' input.json