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(..)実行するのが短いですto_entries | map | from_entriesindex("/contact_group/109") | notこのセクションでは、文字列が次の場合にエントリが追加されることを保証します。いいえ.value配列にすでに存在します。

jqplayでデモを見る

おすすめ記事