是否可以获取具有JMES路径中最大值的属性的所有对象?



(一些精度:我想要一个完整的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)]但它给了我一个错误。我不知道为什么,所以问题是:

  1. 首先,是否可以在JMES中做到这一点(使用任何方式和任何工具) 路径?
  2. 最后,如果可能,怎么做?

编辑:我认为这是一个类型问题。例如,如果我使用此代码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>

相关内容

  • 没有找到相关文章

最新更新