在JDK 8中,Nashorn与新的JSON-P(javax.json)API之间是否存在任何计划的互操作性?

时间:2013-09-27 21:03:51

标签: java json java-8 nashorn

最近我看了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的默认实施。

2 个答案:

答案 0 :(得分:2)

在深入研究Nashorn代码后,我没有找到任何对javax.json包的引用。但是,我确实在JSObject中找到了以下评论:

  

此类也可以由任意Java类子类化。 Nashorn会   像nashorn脚本对象一样处理这些类的对象。通常的nashorn   obj [i],obj.foo,obj.func(),delete obj.foo等操作将被粘合   适当的方法调用此类。

JsonObjectJsonArray包装在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非常低。您需要使用JsonObjectBuilderadd方法手动添加json属性。