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

问题描述

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

输入:

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

所需的输出:

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

我要输入的唯一要标识要删除的项目就是它在数组中的索引。

我认为:

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

也许我可以在select内完成($val | index(.)) == <desiredIndex>,但是使用| =时我不知道如何声明变量,而且看起来效率不高...

解决方法

如果$ i是相关索引:

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

例如:

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

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

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

在对问题进行修改以明确实际要求之前,提供了以下更新。保留以备后代

按值选择

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

按索引删除

,或者如果要通过索引 删除它们,请使用del()和路径表达式作为要删除的索引。例如以下将删除索引1,2处的值

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...