现在有一个字符串和一个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);
}
}
}
}