首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在bash中的特定JSON字段中查找最大值

在bash中的特定JSON字段中查找最大值
EN

Stack Overflow用户
提问于 2019-05-22 00:23:35
回答 2查看 475关注 0票数 0

我正在写一个bash脚本,卷曲后的API。来自post的响应具有以下格式的返回值:

代码语言:javascript
复制
{
  "other": "irrelevant-fields",
  "results": [
    {
      "datapoints": [
        {"timestamp": 1555977600, "value": 0},
        {"timestamp": 1555984800, "value": 15},
        {"timestamp": 1555992000, "value": 5}
      ]
    }
  ]
}

我想从"value“列中提取最高的数字,但在bash中编写此代码时遇到问题。我是JSON的初学者,没有真正的引用可以用来过滤掉我不需要的字符串和值,因为除了时间戳之外,每个数组都是相同的,但我不关心时间戳,只关心返回的最高值。

我当前的代码只是从bash中的文件中提取最大数的通用方法:

代码语言:javascript
复制
grep -Eo '[[:digit:]]+' | sort -n | tail -n 1

返回1555992000的是...but而不是15

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-22 01:21:26

代码语言:javascript
复制
echo '
{
  "other": "irrelevant-fields",
  "results": [
    {
      "datapoints": [
        {"timestamp": 1555977600, "value": 0},
        {"timestamp": 1555984800, "value": 15},
        {"timestamp": 1555992000, "value": 5}
      ]
    }
  ]
}
' | jq '.results[].datapoints | max_by(.value)'

输出将如下所示:

代码语言:javascript
复制
{
  "timestamp": 1555984800,
  "value": 15
}

有关更多信息,请参阅jq上的这篇Medium帖子,或该程序的主页https://stedolan.github.io/jq/

票数 3
EN

Stack Overflow用户

发布于 2019-05-22 06:14:26

请使用合适的JSON解释器/解析器处理JSON,如Xidel

代码语言:javascript
复制
$ cat <<EOF | xidel -s - -e '$json/max((.//datapoints)()/value)'
{
  "other": "irrelevant-fields",
  "results": [
    {
      "datapoints": [
        {"timestamp": 1555977600, "value": 0},
        {"timestamp": 1555984800, "value": 15},
        {"timestamp": 1555992000, "value": 5}
      ]
    }
  ]
}
EOF

这将返回15

(或全文:-e '$json/max((results)()/(datapoints)()/value)')

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56242621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档