问题描述
要保留整个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])