我正在写一个bash脚本,卷曲后的API。来自post的响应具有以下格式的返回值:
{
"other": "irrelevant-fields",
"results": [
{
"datapoints": [
{"timestamp": 1555977600, "value": 0},
{"timestamp": 1555984800, "value": 15},
{"timestamp": 1555992000, "value": 5}
]
}
]
}
我想从"value“列中提取最高的数字,但在bash中编写此代码时遇到问题。我是JSON的初学者,没有真正的引用可以用来过滤掉我不需要的字符串和值,因为除了时间戳之外,每个数组都是相同的,但我不关心时间戳,只关心返回的最高值。
我当前的代码只是从bash中的文件中提取最大数的通用方法:
grep -Eo '[[:digit:]]+' | sort -n | tail -n 1
返回1555992000
的是...but而不是15
。
发布于 2019-05-22 01:21:26
echo '
{
"other": "irrelevant-fields",
"results": [
{
"datapoints": [
{"timestamp": 1555977600, "value": 0},
{"timestamp": 1555984800, "value": 15},
{"timestamp": 1555992000, "value": 5}
]
}
]
}
' | jq '.results[].datapoints | max_by(.value)'
输出将如下所示:
{
"timestamp": 1555984800,
"value": 15
}
有关更多信息,请参阅jq上的这篇Medium帖子,或该程序的主页https://stedolan.github.io/jq/
发布于 2019-05-22 06:14:26
请使用合适的JSON解释器/解析器处理JSON,如Xidel。
$ 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)'
)
https://stackoverflow.com/questions/56242621
复制相似问题