您将如何使用 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
会更有效,但出于可扩展性的目的,我尝试使用更通用的方法。
我正在尝试处理一个大型 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
会更有效,但出于可扩展性的目的,我尝试使用更通用的方法。