将值添加到 json 数组

将值添加到 json 数组

我有一些 JSON 对象,如果它尚不存在,我需要添加一个值。

每个对象如下所示,但每个数组 (1-5) 内的 contact_group 会有所不同:

{
"contact_groups": {
    "1": [
      "/contact_group/78"
    ],
    "2": [
      "/contact_group/79"
    ],
    "3": [],
    "4": [],
    "5": []
  }
}

"/contact_group/109"如果每个数组尚不存在,我想将其添加到其中,因此上面的内容将变为:

{
"contact_groups": {
    "1": [
      "/contact_group/78",
      "/contact_group/109"
    ],
    "2": [
      "/contact_group/79",
      "/contact_group/109"
    ],
    "3": [
      "/contact_group/109"
    ],
    "4": [
      "/contact_group/109"
    ],
    "5": [
      "/contact_group/109"
    ]
  }
}

我很确定 jq 可以做到这一点,但我真的没有经验,所以我不知道从哪里开始。有谁知道如何/是否可以做到这一点?

答案1

您可以with_entries()在父元素上使用函数将子元素转换为由key和键控的对,value并将字符串添加到value数组中(如果还没有)

jq '.contact_groups |= ( with_entries( if ( .value | index("/contact_group/109") | not ) then .value += [ "/contact_group/109" ] else . end ) )'

内置函数with_entries(..)是doing 的简写to_entries | map | from_entriesindex("/contact_group/109") | not如果字符串是,该部分确保添加条目不是已经存在于.value数组中。

请参阅 jqplay 上的演示

相关内容