Java中的解析可在Java中访问

Java中的解析可在Java中访问,java,nashorn,Java,Nashorn,我有 来自org.json库 在纳肖恩,我希望能够做到 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); return jsonObject; } 我最终得到的是NPE。但如果我这样做了 let foo = parseXML(someXMLString); console.log(foo.someProperty); 它起作用了。是否有一个与JSON.

我有

来自org.json库

在纳肖恩,我希望能够做到

public JSONObject parseXML(String xml) {
    JSONObject jsonObject = XML.toJSONObject(xml);
    return jsonObject;
}
我最终得到的是NPE。但如果我这样做了

let foo = parseXML(someXMLString);
console.log(foo.someProperty);
它起作用了。是否有一个与JSON.parse等效的函数,我可以在JavaLand中执行并返回,而不需要JavaScript中的JSON.parse


编辑:请注意它不是重复的。我不是在问如何解析JSON中的某些值,我是在问如何返回整个对象,以便Nashorn在不使用额外JSON的情况下解析它。parse

您可以从Java调用JSON.parse或任何其他脚本函数。从Java调用JSON.parse的示例代码:

let foo = parseXML(someXMLString);
console.log(JSON.parse(foo.someProperty));

public static JSONObject parseXML(String xml)
YourClass.parseXML可能重复。很抱歉,为了简洁起见,我省略了它。我有映射到此类的绑定设置。正在调用该方法并返回此对象。我只需要对返回的对象调用一个JSON.parse。我希望能够忽略这一点。
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import jdk.nashorn.api.scripting.JSObject;

public class Main {
    public static void main(String[] args) throws Exception {
        ScriptEngineManager m = new ScriptEngineManager();
        ScriptEngine e = m.getEngineByName("nashorn");

        // get ECMAScript JSON.parse
        JSObject jsonParse = (JSObject)e.eval("JSON.parse");

        // initialize/retrieve JSON string here
        String str = "{ \"foo\": 42, \"bar\": { \"x\": \"hello\" } }";

        // call JSON.parse from Java
        Object parsed = jsonParse.call(null, str);

        // expose parsed object to script
        e.put("obj", parsed);

        // access parsed object from script
        e.eval("print(obj.foo)");
        e.eval("print(obj.bar.x)");
    }
}