通过从数组中删除除给定数组索引处的元素之外的所有元素来更新整个 json

update whole json by remove all elements from array except the one at given array index

要保留整个 json 结构,但在一个数组中我想删除所有值,但给定索引上的一个值除外。

输入:

{
    "a": {
        "b": [11,22,33,44]
    }
    
}

期望的输出:

{
    "a": {
        "b": [22]
    }
    
}

我在识别要删除的项目时所输入的只是它在数组中的索引。

我认为:

.a.b|=map(select(<SELECT_WHAT?>))

也许我可以在 select 内完成 ($val | index(.)) == <desiredIndex>,但是使用 |= 我不知道如何声明变量,而且它似乎不是很有效 ...

如果您想 select 按索引,只需使用数组值迭代器语法来指定要保留的索引

.a.b |= [ .[1, 2] ]

在修改问题之前提供了以下更新以清除实际要求。为子孙后代保留它

按值选择

.a.b |= map(select(. == 22))

按索引删除

或者如果你想按索引删除 如果 它们是已知的,请使用 del() 和路径表达式作为要删除的索引。例如以下删除索引 1,2

处的值
.a.b |= del(.[1, 2])

如果$i是相关索引:

.a.b |= [.[$i]]

例如:

jq --argjson i 1 '.a.b |= [.[$i]]' input.json