下面的jq菜谱可以简化吗

问题描述 投票:0回答:1

使用 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

所以我对其工作原理的理解不正确。

json jq
1个回答
0
投票
.data |= map(select(.age >= 10))

将以更简洁的方式产生相同的输出,就像您可以在此在线演示中进行测试一样。

© www.soinside.com 2019 - 2024. All rights reserved.