(一些精度:我想要一个完整的JMES路径的解决方案,所以我不想使用javascript或其他语言来存储变量)
例如,如果我有一个简单的对象,如下所示:
[
{
"att1":12,
"att2":"name1"
},
{
"att1":15,
"att2":"name2"
},
{
"att1":15,
"att2":"name3"
},
{
"att1":11,
"att2":"name4"
}
]
如果我在这里像这样使用max_by
函数:max_by(@,&att1)
,它会给我这个结果:
{
"att1": 15,
"att2": "name2"
}
在这种情况下,只有一个对象,但我们可以看到至少有 2 个对象,最大值为att1
.所以我尝试了这段代码:@[?att1 == max_by(@,&att1)]
但它给了我一个错误。我不知道为什么,所以问题是:
- 首先,是否可以在JMES中做到这一点(使用任何方式和任何工具) 路径?
- 最后,如果可能,怎么做?
编辑:我认为这是一个类型问题。例如,如果我使用此代码type(`4`)
它会返回"number"
,但是如果我type(4)
或type(to_number(4))
使用此代码,它会给我一个错误
编辑2:如果我尝试这样做:max_by(@,&att1).att1 == `15`
它返回true
,但是当我这样做时:@[?att1 == max_by(@,&att1)]
它返回错误。我也检查了类型,这个max_by(@,&att1).att1
是一个数字,所以通常我认为没有类型错误......
为了按数字过滤,该数字必须用back ticks
var arr = [{"att1":12,"att2":"name1"},{"att1":15,"att2":"name2"},{"att1":15,"att2":"name3"},{"att1":11,"att2":"name4"}]
let maxAtt1 = jmespath.search(arr, "max_by(@,&att1).att1")
console.log(jmespath.search(arr, "[?att1 == `" + maxAtt1 + "`]"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jmespath/0.15.0/jmespath.js"></script>