json - 如何获取大型 json 文件中日期字段的最大值?

标签 json bash shell max jq

我有一个大约 500MB 的大型 JSON 文件,它是 URL 调用的响应。我需要使用 shell 脚本(bash)在“结果”数组中获取 JSON 文件中“日期”字段的最大值。当前使用 jq 如下。下面适用于较小的文件,但对于较大的文件,它返回 null。

maxDate=$(cat ${jsonfilePath} | jq '[ .results[]?.date ] | max') 

请帮忙。谢谢!我是 shell 脚本、json、jq 的新手。

示例/输入 json 文件内容:

{
    "results": [
        {
            "Id": "123",
            "date": 1588910400000,
            "col": "test"
        },
        {
            "Id": "1234",
            "date": 1588910412345,
            "col": "test2"
        }
    ],
    "col2": 123
}

最佳答案

在命令行上给定 --stream 选项,JQ 不会将整个输入加载到内存中,而是按 token 读取输入 token ,以这种方式生成数组:

[["results",0,"Id"],"123"]
[["results",0,"date"],1588910400000]
...
[["results",1,"date"],1588910412345]
...

由于这一功能,我们可以从输入中仅选择日期并找出最大日期,而不会耗尽内存(以速度为代价)。例如:

jq -n --stream 'reduce (inputs|select(.[0][-1]=="date" and length==2)[1]) as $d (null; [.,$d]|max)' file

关于json - 如何获取大型 json 文件中日期字段的最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61691807/

相关文章:

bash - 在多个 UNIX 环境中处理 PATH 的最佳/常规方法

c - 制作我自己的 shell

python - 无法从文件访问完整的 python 模块,但可以从 shell 访问

javascript - 将数组连接到 Google Chart

python - JSON API 标准的 Django Rest Framework 方法

Bash 脚本 if 语句

Bash shell,尝试创建和评估掩码

javascript - $.getJSON 没有进入函数并且没有获取任何数据

javascript - JSON 解析在 jQuery 中不起作用

bash - 为什么当我运行以下代码时 bash 告诉我找不到命令 if ?