在 Java 中解析 在 Java 中可访问
Parse in Java accessible in Java
我有
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));
有效。我可以在 Java land 和 return 中执行与 JSON.parse 等效的功能,而无需 JavaScript 中的 JSON.parse 吗?
编辑:请注意它不是重复的。我不是在问如何解析 JSON 中的某些值,我是在问如何 return 整个对象,以便 Nashorn 可以解析它而无需额外的 JSON.parse
您可以从 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)");
}
}
我有
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));
有效。我可以在 Java land 和 return 中执行与 JSON.parse 等效的功能,而无需 JavaScript 中的 JSON.parse 吗?
编辑:请注意它不是重复的。我不是在问如何解析 JSON 中的某些值,我是在问如何 return 整个对象,以便 Nashorn 可以解析它而无需额外的 JSON.parse
您可以从 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)");
}
}