2017-07-27 56 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);";