美文网首页
java nashorn 引擎对象内嵌json字符串时JSON.

java nashorn 引擎对象内嵌json字符串时JSON.

作者: 清雨季 | 来源:发表于2021-02-05 14:25 被阅读0次

    假设预置了:json = "{\"name\": \"jack\", \"age\": 24}",在java中使用nashorn引擎执行以下代码块:

    var obj = JSON.parse(json);
    print(obj.name);
    for (var key in obj) {
        print(key + ":" + obj[key]);
    }
    

    具体java代码为:

        public static void main(String[] args) throws Exception{
            ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
            ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn");
    
            String json = "{\"name\": \"jack\", \"age\": 24}";
            scriptEngine.put("json", json);
    
            String js01 = "var obj = JSON.parse(json);print(obj.name);for(var key in obj) {print(key + \":\" + obj[key]);}";
            scriptEngine.eval(js01);
        }
    

    结果一切正常:


    但是如果这个预置的json字符串是在一个java对象中时,会报bug:
    假设我们有一个request对象,这个对象有一个json字段,而这个json字段的值为"{\"name\": \"jack\", \"age\": 24}",然后执行以下javascript代码:

    request.json = JSON.parse(request.json);
    print(request.json);
    for (var key in request.json) {
        print(key + ":" + request.json[key]);
    }
    

    具体执行的java代码为:

        public static void main(String[] args) throws Exception{
            ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
            ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn");
            
            String json = "{\"name\": \"jack\", \"age\": 24}";
            Request request = new Request();
            request.setJson(json);
            scriptEngine.put("request", request);
    
            String js01 = "request.json = JSON.parse(request.json);print(request.json);for(var key in request.json) {print(key + \":\" + request.json[key]);}";
    
            scriptEngine.eval(js01);
        }
    

    结果异常:


    解决办法:暂未找到解决方法

    相关文章

      网友评论

          本文标题:java nashorn 引擎对象内嵌json字符串时JSON.

          本文链接:https://www.haomeiwen.com/subject/gkjwectx.html