【问题标题】:jq using stream to parse a json file > 20 gbjq 使用流解析 json 文件 > 20 gb
【发布时间】:2020-06-16 03:05:35
【问题描述】:

我有一个 json 文件,它的数据 >20 GB,如下所示:

{
  "_id": {
    "$serialnumber": "572"
  },
  "content": "{\"001\":\"77\",\"401\":[[\" 0\",[\"a\",\"UK\"],[\"b\",\"Euy/ O\"],[\"c\",\"20160811\"],[\"g\",\"R2\"]],[\" 1\",[\"a\",\"UK\"],[\"b\",\"LO\"],[\"c\",\"20160811\"]]]}"
}
{
  "_id": {
    "$serialnumber": "573"
  },
  "content": "{\"001\":\"234\",\"424\":[[\" 0\",[\"a\",\"UK\"],[\"b\",\"Euy/ O\"],[\"c\",\"20160811\"],[\"g\",\"R2\"]],[\" 1\",[\"a\",\"UK\"],[\"b\",\"LO\"],[\"c\",\"20160811\"]]]}"
}
{
  "_id": {
    "$serialnumber": "574"
  },
  "content": "{\"001\":\"549\",\"432\":[[\" 0\",[\"a\",\"UK\"],[\"b\",\"Euy/ O\"],[\"c\",\"20160811\"],[\"g\",\"R2\"]],[\" 1\",[\"a\",\"UK\"],[\"b\",\"LO\"],[\"c\",\"20160811\"]]]}"
}
{
  "_id": {
    "$serialnumber": "575"
  },
  "content": "{\"001\":\"888\",\"532\":[[\" 0\",[\"a\",\"UK\"],[\"b\",\"Euy/ O\"],[\"c\",\"20160811\"],[\"g\",\"R2\"]],[\" 1\",[\"a\",\"UK\"],[\"b\",\"LO\"],[\"c\",\"20160811\"]]]}"
}

我需要一种使用 jq 流的方法(我已经安装了 1.6 版)来获取内容中包含的所有 001 值,一个 4.. 元素。(400,或 401,或 402,或 403,... )

例如上面会返回:

77
234
549

而不是 888,它不包含任何 4.. 元素。

001 77 has the \"401\" element
001 234 has the \"424\" element
001 549 has the \"432\" element

请在下面找到我解决此问题的尝试之一:

jq -cn --stream 'fromstream(1|truncate_stream(inputs | select(.[0][] == "_id") | del(.[0][0]))) | select(.content == "400")'

【问题讨论】:

  • 你为什么使用--stream?如果没有它,您会看到错误吗?
  • 我使用流选项,因为我有一个超过 20 GB 大小的 json 文件
  • 是的,但您的输入似乎是对象本身的流。我认为这样的输入不应该导致内存错误,我错了吗?
  • 能否请您详细说明我应该如何更改 jq 命令以免出错,因为即使没有流选项我也没有得到有效结果
  • 就像,如果您的输入不是数组而是问题中显示的流,.content|fromjson|select(keys[1]|startswith("4")) ."001" 应该可以工作 imo

标签: json stream jq


【解决方案1】:

由于您的输入已经是流,因此无需使用 --stream 选项。以下产生所需的输出:

< input.json jq -r '.content
| fromjson
| select( any(keys_unsorted[]; test("^4")) )
| .["001"]'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-01
    • 2013-09-02
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多