javascript - Java 8 Nashorm 引擎无法从 json 对象获取 key

标签 javascript java json nashorn

我试图在 nashorn 引擎中存储一个 JSON 对象并按键获取值。

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']"));

请告诉我我错过了什么。

最佳答案

engine.put("minimumBet", "{\"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

关于javascript - Java 8 Nashorm 引擎无法从 json 对象获取 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40743647/

相关文章:

javascript - 如何在页面加载时将当前时间和日期的这种格式设置为默认格式?

javascript - 将 png 转换为张量 tensorflow.js

java - 如何在嵌入式 Tomcat 8 中配置 JDBC 资源?

ios - Objective C TableView 清晰 Json 解析

javascript - 如何获取 Object.keys(myEl) 引用的子级

javascript - phonegap中deviceready监听器中的第三个参数有什么用?

javascript - 无论如何强制所有样式为 "block"或 "none"而不通过循环?

java - 无法解析 : com. android.support :support-v4:26. 0.2

java - 如何在 shell 脚本中同时运行 java 和 python 命令

javascript - 序列化一个javascript数组