这款轻量级 Java 表达式引擎,真不错!( 二 )


Map<String, Object> env = new HashMap<>();env.put("person", new Person("movee", 25));env.put("a", 20L);Object result = AviatorEvaluator.execute("person.name", env);这样一来,aviator可以非常方便的从json字符串中提取子json字符串
String jsonStr = """        {            "a": {                "b": [                        {                            "x": 3                        },                        {                            "x": 4                        }                    ]            }        }        """;    JSONObject jsonObj = new JSONObject(jsonStr);    // 结果返回 3    Object value = AviatorEvaluator.execute("a.b[0]['x']", jsonObj.toMap());使用函数aviator已经提供了很多开箱即用的函数了:
// 返回4    Long r = (Long) AviatorEvaluator.execute("math.round(4.3)");        // 返回5    Long r = (Long) AviatorEvaluator.execute("string.length('hello')");        // 返回一个ArrayList:[1,2,3]    Object r = AviatorEvaluator.execute("seq.list(1,2,3)");更详细的内置函数列表请参考:aviator函数库列表
我们也可以自定义一个java函数,自己编写一个类,继承aviator的AbstractFunction类,然后实现相应的方法即可:
public class AddFunction extends AbstractFunction {        /**         * 函数实现的功能         * @param env 参数         * @param arg1 函数的第一个参数         * @param arg2 函数的第二个参数         * @return 返回值         */        @Override        public AviatorObject call(Map<String, Object> env, AviatorObject arg1, AviatorObject arg2) {            long num1 = FunctionUtils.getNumberValue(arg1, env).longValue();            long num2 = FunctionUtils.getNumberValue(arg2, env).longValue();            return AviatorLong.valueOf(num1+num2);        }        /**         * 注册到aviator的名字         * @return 函数名字         */        @Override        public String getName() {            return "add";        }    }然后就可以注册到aviator中,像使用内置函数一样使用自定义函数:


推荐阅读