字符串转为可执行代码

现在有一个字符串和一个json的数据
String str = “param.存款>=500&&贷款<=4000&&年龄>=18&&性别==‘男’&& param.欠款.test.b<=100”;
String jsonStr = “{性别: 男, 年龄: 20,param:{存款: 2000, 余额:0, 欠款:{test: {a:200, b: 100}}}, 贷款: 1000}”;
我要怎么把字符串当成可执行的代码 当成条件, 下面就是实现的代码

import cn.hutool.json.JSONObject;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class test {
    public static void main(String[] args) throws ScriptException {
        // create a script engine manager
        ScriptEngineManager factory = new ScriptEngineManager();
        // create a JavaScript engine
        ScriptEngine engine = factory.getEngineByName("JavaScript");

        try {
            String str = "param.存款>=500&&贷款<=4000&&年龄>=18&&性别==\'男\'&& param.欠款.test.b<=100";
            String jsonStr = "{性别: 男, 年龄: 20,param:{存款: 2000, 余额:0, 欠款:{test: {a:200, b: 100}}}, 贷款: 1000}";
            JSONObject jsonObject = new JSONObject(jsonStr);
            Map<String, Object> map = new HashMap<>();
            Iterator sIterator = jsonObject.keySet().iterator();
            while(sIterator.hasNext()){
                Object key=sIterator.next();
                Object value = jsonObject.get(key);
                if (value instanceof JSONObject){
                    JSONObject object = new JSONObject(value);
                    String prefix = (String) key;
                    resultTest(object, map, prefix);
                }else {
                    map.put(key.toString(), value);
                }
            }
            System.out.println(map);
            Iterator<String> iterator = map.keySet().iterator();
            while (iterator.hasNext()){
                String next = iterator.next();
                Object object = map.get(next);
                String value =map.get(next).toString();
                if (object instanceof String){
                    str = str.replace(next, "'" + value + "'");
                } else {
                    str = str.replace(next, value);
                }
            }
            System.out.println(str);
            // evaluate JavaScript code from String
            Object eval = engine.eval(str);
            System.out.println(eval);
        } catch (ScriptException e) {
            e.printStackTrace();
            System.out.println(false);
        }
    }

    private static void  resultTest(JSONObject jsonObject, Map<String, Object> map, String str){
        Iterator sIterator = jsonObject.keySet().iterator();
        while(sIterator.hasNext()){
            Object key=sIterator.next();
            String test  = str + "." + key;
            Object value = jsonObject.get(key);
            if (value instanceof JSONObject){
                JSONObject object = new JSONObject(value);
                resultTest(object, map, test);
            }else {
                map.put(test, value);
            }
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值