Json

將值添加到 json 數組

  • July 16, 2020

我有一些 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 可以做到這一點,但我真的沒有經驗,所以我不知道從哪裡開始。有誰知道如何/如果可以做到這一點?

您可以with_entries()在父元素上使用函式將子元素轉換為鍵值對keyvalue並將字元串添加到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 上查看展示

引用自:https://unix.stackexchange.com/questions/598856