请注意,该帖子已被标记jq
,我完全不尝试使用javascript。
我有一个对象,该对象具有数组作为其字段之一。我想从对象数组中删除符合条件的元素,但要保留对象。我环顾四周,我只能发现一些片段,仅返回恰好现在包含较少项的数组。
这是一个例子:
{
"foo": "bar",
"events": [
{
"id": 1,
"msg": "starting"
},
{
"id": 2,
"msg": "working on it"
},
{
"id": null,
"msg": "done"
}
]
}
我想找回以下信息:
{
"foo": "bar",
"events": [
{
"id": 1,
"msg": "starting"
},
{
"id": 2,
"msg": "working on it"
}
]
}
注意:万一这会影响答案,我真的只对最后一个元素感兴趣。我计划在以下管道阶段中建立一个新对象,例如:
jq '$answer | {bar:.foo, event: .events[-1].msg}`
我都尝试过
select(.events[].id != null)
和
del(.events[], select(.id == null)))
没有运气。
我认为您可能正在寻找以下jq
过滤器。表达式.events[] | select(.id == null)
将键返回到id
值为空的对象,并del()
删除该键/值对。
jq 'del(.events[] | select(.id == null))'
附带说明一下,如果您只想按索引删除元素,则可以按以下方式使用。下面的示例从索引2中删除该元素,该数组实际上从0开始。
jq 'del( .events[2] )'
但是请记住,对于您的原始问题,不建议使用这种方法,因为您不知道键的哪个索引将包含空值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句