最近我看了Nashorn和新的JSON-P API(javax.json)。由于两者显然都面向JSON,它们之间是否存在任何计划的互操作性(即Nashorn是否包含对javax.json.spi.JsonObject的本机支持)?
编辑#1
@Vik Gamov,
通过互操作性,我的意思是一种在运行时将javascript / JSON对象注入脚本的方法。我知道Nashorn允许来自其他JVM语言的对象,比如标准Java对象。但是,如果有人想要使用100%的javascript,那么需要一种从外部创建纯JS对象的简单方法,它似乎是 jlaskey , hannesw (根据评论)在JSObject上)和Oracle的其他人/ gals提供了实现这一目标的方法。
事实证明,他们还为JSObject提供了ScriptObjectMirror的默认实施。
答案 0 :(得分:2)
在深入研究Nashorn代码后,我没有找到任何对javax.json包的引用。但是,我确实在JSObject中找到了以下评论:
此类也可以由任意Java类子类化。 Nashorn会 像nashorn脚本对象一样处理这些类的对象。通常的nashorn obj [i],obj.foo,obj.func(),delete obj.foo等操作将被粘合 适当的方法调用此类。
将JsonObject和JsonArray包装在JSObject实现中相当容易。
编辑#1
事实证明ScriptObjectMirror类可以用作JSObject本身的go-by或默认实现。
答案 1 :(得分:1)
您可以使用nashorn和JSR-223 apis访问Javascript中的任何Java类。例如,您可以在javascript代码中使用Jackson或google gson映射器。
var json = {};
// google gson mapper
var MAPPER = new com.google.gson.Gson();
/**
* Converts object to a json string.
* @param object - the object to convert.
* @return {String} the resultant json.
*/
json.toJson = function (object) {
return MAPPER.toJson(object);
};
json.roundtripJson = function (object) {
return JSON.parse(json.toJson(object));
};
您能详细说明您在谈论什么类型的互操作性?
目前,JSON-P的API非常低。您需要使用JsonObjectBuilder的add
方法手动添加json属性。