![将值添加到 json 数组](https://linux22.com/image/177100/%E5%B0%86%E5%80%BC%E6%B7%BB%E5%8A%A0%E5%88%B0%20json%20%E6%95%B0%E7%BB%84.png)
我有一些 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_entries
。index("/contact_group/109") | not
如果字符串是,该部分确保添加条目不是已经存在于.value
数组中。