如何使用JSONata从JSON中获取值最高的前5个键值对
使用JSONata提取值最高的前5个键值对
场景说明
你的JSON数据是嵌套数组结构,且内部的键值对已按value降序排列,只需提取前5个元素即可得到值最高的条目。
核心表达式
由于数据已排序,直接通过数组切片获取前5个元素:
$[0][0..4]
或者使用$slice函数实现相同效果:
$slice($[0], 0, 5)
分步解释
$[0]:定位到外层数组中的内层数组(你的数据外层是一个数组,里面仅包含一个存放键值对的数组)[0..4]:JSONata的数组切片语法,从索引0到索引4(包含两端),共5个元素;$slice(数组, 起始索引, 长度)函数则直接指定取前5个元素
验证示例
输入JSON(修正语法错误后)
[ [ { "key": "A", "value": 310 }, { "key": "B", "value": 240 }, { "key": "C", "value": 110 }, { "key": "D", "value": 90 }, { "key": "E", "value": 60 }, { "key": "F", "value": 50 }, { "key": "G", "value": 30 }, { "key": "H", "value": 10 } ] ]
输出结果
[ { "key": "A", "value": 310 }, { "key": "B", "value": 240 }, { "key": "C", "value": 110 }, { "key": "D", "value": 90 }, { "key": "E", "value": 60 } ]
扩展:数据未排序的情况
如果原始数据未按value降序排列,需要先排序再取前5,表达式如下:
$sort($[0], function(a,b) { b.value - a.value })[0..4]
$sort(数组, 排序函数):按value从高到低排序,b.value - a.value实现降序逻辑- 后续切片步骤与前面一致
内容的提问来源于stack exchange,提问作者Imaginary-Pea
相关产品推荐
相关产品推荐

