您将如何使用 jq 从大型 json 文件中收集列表的前几个条目?

How would you collect the first few entries of a list from a large json file using jq?

我正在尝试处理一个大型 json 文件以进行测试,该文件包含几千个条目。 json 包含一长串 data 对我来说太大了,无法一次处理。使用 jq,是否有一种简单的方法来获取 json 的有效片段,该片段仅包含 data 列表中的前几个条目?例如,是否有一个查询会查看整个 json 文件,而 return 对我来说是一个有效的 json,它只包含 data 的前 4 个条目?谢谢!

{
"info":{
"name":"some-name"
},
"data":[
{...},
{...},
{...},
{...}
}

根据您的代码段,相关的 jq 将是:

.data |= .[:4]

下面是一个使用 --stream 选项的例子:

$ cat input.json
{
  "info": {"name": "some-name"},
  "data": [
    {"a":1},
    {"b":2},
    {"c":3},
    {"d":4},
    {"e":5},
    {"f":6},
    {"g":7}
  ]
}
jq --stream -n '
  reduce (
    inputs | select(has(1) and (.[0] | .[0] == "data" and .[1] < 4))
  ) as $in (
    {}; .[$in[0][-1]] = $in[1]
  )
' input.json
{
  "a": 1,
  "b": 2,
  "c": 3,
  "d": 4
}

注意:在这种情况下使用 limit 会更有效,但出于可扩展性的目的,我尝试使用更通用的方法。