代码之家  ›  专栏  ›  技术社区  ›  Coder

Java 8 Nashorm引擎无法从json对象获取密钥

  •  0
  • Coder  · 技术社区  · 8 年前

    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    engine.put("minimumBet", "{\"SEK\":\"1\",\"EUR\":\"2\"}");
    
    //This prints {"SEK":"1","EUR":"2"}
    System.out.println(engine.eval("minimumBet")); 
    
    //This assert fails
    //engine.eval("minimumBet['SEK']") is retruning null
    assertEquals(1, engine.eval("minimumBet['SEK']"));
    

    请告诉我我错过了什么。

    1 回复  |  直到 8 年前
        1
  •  1
  •   wickund    8 年前

    发动机put(“最小值”,“SEK”:“1”,“EUR”:“2”);不会计算您在属性中放置的值,因此您只是设置一个字符串。您需要评估引擎内的字符串。

    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;
    import javax.script.ScriptException;
    
    public class Test {
        public static void main(String[] args) {
            try {
                ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
                engine.put("minimumBet", "{\"SEK\":1,\"EUR\":2}");
                engine.eval("var bet = JSON.parse(minimumBet);");
                engine.eval("var krona = bet['SEK'];");
                engine.eval("var euro = bet['EUR'];");
                Object krona = engine.get("krona");
                Object euro = engine.get("euro");
                System.out.println(krona + " " + krona.getClass());
                System.out.println(euro + " " + euro.getClass());
            } catch (ScriptException ex) {
                ex.printStackTrace();
            }
        }
    }
    

    产量:

    1 class java.lang.Integer
    2 class java.lang.Integer