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

发布于 2025-01-12 06:14:45 字数 300 浏览 0 评论 0原文

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

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

I am trying to process a large json file for testing purposes that has a few thousand entries. The json contains a long list of data to is too large for me to process in one go. Using a jq, is there an easy way to get a valid snippet of the json that only contains the first few entries from the data list? For example is there a query that would look at the whole json file and return to me a valid json that only contains the first 4 entries from data? Thank you!

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

萌辣 2025-01-19 06:14:45

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

.data |= .[:4]

Based on your snippet, the relevant jq would be:

.data |= .[:4]
流年里的时光 2025-01-19 06:14:45

下面是一个使用 --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 会更有效,但出于可扩展性的目的,我尝试更通用。

Here's an example using the --stream option:

$ 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
}

Note: Using limit would have been more efficient in this case, but I tried to be more generic for the purpose of scalability.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文