3

最近我查看了 Nashorn 和新的 JSON-P API (javax.json)。由于两者显然都面向 JSON,它们之间是否有任何计划的互操作性(即 Nashorn 是否包括对 javax.json.spi.JsonObject 的本机支持)?

编辑#1

@维克加莫夫,

通过互操作性,我的意思是一种在运行时将 javascript / JSON 对象注入脚本的方法。我知道 Nashorn 允许来自其他 JVM 语言的对象,例如标准 Java 对象。但是,如果有人想使用 100% javascript,则需要一种简单的方法来从外部创建纯 JS 对象,看起来jlaskeyhannesw(根据 JSObject 的评论)和 Oracle 的其他人/女孩提供了一个实现这一目标的方法。

事实证明,他们还使用 ScriptObjectMirror 为 JSObject 提供了默认实现

4

2 回答 2

2

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

该类也可以由任意 Java 类子类化。Nashorn 会将此类对象视为 nashorn 脚本对象。通常的 nashorn 操作,如 obj[i]、obj.foo、obj.func()、删除 obj.foo 将被粘在这个类的适当方法调用上。

在 JSObject 实现中包装JsonObjectJsonArray是相当容易的。

编辑#1

事实证明,ScriptObjectMirror类可以用作参考或 JSObject 本身的默认实现。

于 2013-09-27T23:17:16.500 回答
1

您可以使用 nashorn 和 JSR-223 api 访问 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 属性。

于 2013-09-28T17:20:39.853 回答