java利用ognl获取最大值

一、Ognl简介

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。

二、Ognl应用场景

简单地说,Ognl最大的作用就是支持 name.field1.field2.value 方式的取值。如果你的应用需要用到这方面的功能,你可能就需要使用到Ognl了,比如用户要输入Ognl表达式从上下文中取值.

最出名的,也就是Struts框架就运用了Ognl表达式,从而在jsp中使用Ognl进行取值。

ognl项目应用实战

riskResult是一个集合,获取思路是获取列表指定的risktime的集合,然后调用sort和reverse方法在获取第一个值,因为sort默认是正序排序,通过reverse方法进行反转,获取第一个既是最大值
String s = "{\n" +
                    "    \"code\": 10000,\n" +
                    "    \"thirdResult\": {\n" +
                    "        \"msg\": \"请求成功\",\n" +
                    "        \"code\": \"10000\",\n" +
                    "        \"data\": {\n" +
                    "            \"fraudScore\": \"86\",\n" +
                    "            \"riskResult\": [\n" +
                    "                {\n" +
                    "                    \"riskItemValue\": \"1834****555\",\n" +
                    "                    \"riskTime\": \"2017\",\n" +
                    "                    \"riskDetail\": \"FAKE_DATA\",\n" +
                    "                    \"dataType\": \"CREDITEASE\",\n" +
                    "                    \"riskItemType\": \"MOBILE\"\n" +
                    "                },\n" +
                    "                {\n" +
                    "                    \"riskItemValue\": \"4108**********0016\",\n" +
                    "                    \"riskTime\": \"2019\",\n" +
                    "                    \"riskDetail\": \"DIFFICULTIES_OBTAIN_SMALL_BUSINESS\",\n" +
                    "                    \"dataType\": \"OTHER\",\n" +
                    "                    \"riskItemType\": \"ID_NO\"\n" +
                    "                },\n" +
                    "                {\n" +
                    "                    \"riskItemValue\": \"4108**********0016\",\n" +
                    "                    \"riskTime\": \"2019\",\n" +
                    "                    \"riskDetail\": \"DIFFICULTIES_OBTAIN_SMALL_BUSINESS\",\n" +
                    "                    \"dataType\": \"OTHER\",\n" +
                    "                    \"riskItemType\": \"ID_NO\"\n" +
                    "                }\n" +
                    "            ],\n" +
                    "            \"fraudLevel\": \"5\",\n" +
                    "            \"socialNetwork\": {\n" +
                    "                \"macaoCallCnt\": 0,\n" +
                    "                \"gender\": \"男\",\n" +
                    "                \"mobileLocation\": \"吉林-松原市\",\n" +
                    "                \"remoteCallNum\": 36,\n" +
                    "                \"loanCallNum\": 1,\n" +
                    "                \"firstOrderOverdueRate\": \"0\",\n" +
                    "                \"loanCallSeconds\": 182,\n" +
                    "                \"nightCallSeconds\": 4478,\n" +
                    "                \"secondOrderOverdueCnt\": 0,\n" +
                    "                \"activeCallBlackCnt\": 1,\n" +
                    "                \"secondOrderBlackCnt\": 0,\n" +
                    "                \"nightCallCnt\": 5,\n" +
                    "                \"fictionCallCnt\": 5,\n" +
                    "                \"firstOrderOverdueCnt\": 0,\n" +
                    "                \"nightCallNum\": 7,\n" +
                    "                \"fictionCallSeconds\": 907,\n" +
                    "                \"activeCallCnt\": 167,\n" +
                    "                \"macaoCallNum\": 0,\n" +
                    "                \"macaoCallSeconds\": 0,\n" +
                    "                \"courtCallNum\": 0,\n" +
                    "                \"firstOrderBlackRate\": \"0.36\",\n" +
                    "                \"lawyerCallNum\": 0,\n" +
                    "                \"secondOrderM3Cnt\": 0,\n" +
                    "                \"mobileOperator\": \"中国移动\",\n" +
                    "                \"remoteCallCnt\": 16,\n" +
                    "                \"firstOrderM3Cnt\": 0,\n" +
                    "                \"activeCallOverdueCnt\": 0,\n" +
                    "                \"remoteCallSeconds\": 3804,\n" +
                    "                \"firstOrderBlackCnt\": 1,\n" +
                    "                \"loanCallCnt\": \"1\",\n" +
                    "                \"idNoLocation\": \"河南省-焦作市-马村区\",\n" +
                    "                \"fictionCallNum\": 14,\n" +
                    "                \"age\": 28\n" +
                    "            }\n" +
                    "        },\n" +
                    "        \"success\": true,\n" +
                    "        \"flowId\": \"11840882961489920\"\n" +
                    "    }\n" +
                    "}";
// 风险名单-风险最近时间
String ognl50 = "#item = thirdResult.data.riskResult.{riskTime},@java.util.Collections@sort(#item),@java.util.Collections@reverse(#item),#item.get(0)";
JSONObject object = JSONObject.parseObject(s);
Object value50 = Ognl.getValue(ognl50, object);
System.out.println("time="+value50);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐观的Terry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值