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_entries. index("/contact_group/109") | not이 섹션에서는 문자열이 다음과 같은 경우 항목이 추가되도록 보장합니다.아니요.value배열에 이미 존재합니다 .

jqplay에서 데모 보기

관련 정보