一、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);