我有
public JSONObject parseXML(String xml) {
JSONObject jsonObject = XML.toJSONObject(xml);
return jsonObject;
}
来自org.json库的。
在Nashorn,我希望能够做到
let foo = parseXML(someXMLString);
console.log(foo.someProperty);
我最终获得的是NPE。但是如果我做的话
let foo = parseXML(someXMLString);
console.log(JSON.parse(foo.someProperty));
它有效。是否有一个与JSON.parse相同的函数我可以在Java land中执行并返回而不需要JavaScript中的JSON.parse?
编辑:请注意它不是重复的。我不是在问如何解析JSON中的某些值,我问的是如何返回整个对象,以便Nashorn可以解析它而不需要额外的JSON.parse
答案 0 :(得分:1)
您可以从Java调用JSON.parse或任何其他脚本函数。从Java调用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)");
}
}