2017-07-27 52 views
0

这里是我的代码:犀牛引擎不解决PARAMS

JSONArray jsonArray = databaseQueryStatement.getJsonObject(query, connection); 
    String x= "item1has quantity of queryResult[0].quantity"; 


    ScriptEngineManager manager = new ScriptEngineManager(); 
    ScriptEngine engine = manager.getEngineByName("nashorn"); 
    Bindings params = engine.createBindings(); 

    params.put("jsonArrayKey", jsonArray); 
    params.put("c", x); 
    String script = "var queryResult = JSON.parse(jsonArrayKey);" 
        + "var resultedString = c"; 

    engine.eval(script,params); 
    String result=(String) params.get("resultedString"); 
    System.out.println(result); 

当我传递值queryResult[0].quantity而不是c它给我2。但是,当我通过c它是打印:

item1has quantity of queryResult[0].quantity 

我需要打印:

item1has quantity of 2 

我怎样才能做到这一点?我在这里使用java和nashorn引擎。

回答

0

您放入绑定中的字符串不能被评估为脚本代码,因为它只是一个文字。

虽然我不太清楚这是你的意图,如果你改变你的代码如下然后打印内容如您所愿:

[...] 
String x= "item1 has quantity of "; 
[...] 
String script = "var queryResult = JSON.parse(jsonArrayKey);" 
       + "var resultedString = c + queryResult[0].quantity"; 
[...] 

例如一个更灵活的解决方案可能是以下几点:

ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); 
Bindings params = engine.createBindings(); 
params.put("jsonArrayKey", "[{\"quantity\":2},{\"quantity\":3}]"); 
params.put("msg", "item <ID> has quantity of <VALUE>"); 
params.put("index", 0); 
String script = "var queryResult = JSON.parse(jsonArrayKey);\n" 
       + "var resultedString = msg.replace('<ID>', index + 1).replace('<VALUE>', queryResult[index].quantity);";