使用 jq 1.5 版本,我需要根据嵌套对象中的值有条件地输出一些 json 对象(在数组中)。我在 StackOverflow 上查看过并设法得到了我想要的工作,但我想知道它是否可以简化。这是我的数据
{
"data": [
{
"name": "Rich",
"age": 10
},
{
"name": "Michael",
"age": 11
},
{
"name": "Victoria",
"age": 8
},
{
"name": "Philip",
"age": 9
}
]
}
我需要重现相同的结构,但仅限 10 岁或以上的学生,因此输出应如下所示:
{
"data": [
{
"name": "Rich",
"age": 10
},
{
"name": "Michael",
"age": 11
}
]
}
我有以下代码可以实现我想要的:
.data | to_entries | map(select(.value.age>9)) | [.[].value] | {data: .}
但是我在jq手册中读到
with_entries
可以用来代替to_entries
-> map
-> from_entries
,现在我不使用from_entries
,但这让我怀疑我是否应该,如果这意味着我不需要在最后两个管道中手动重新创建数组和对象。
这是解决此类问题的最佳方法吗?
我尝试在地图后使用
from_entries
,看看这是否满足我的需要,但出现错误:
jq: error (at <stdin>:19): Cannot use number (0) as object key
所以我对其工作原理的理解不正确。
.data |= map(select(.age >= 10))
将以更简洁的方式产生相同的输出,就像您可以在此在线演示中进行测试一样。