3

最近、Nashorn と新しい JSON-P API (javax.json) の両方を調べました。どちらも明らかに JSON 向けなので、相互運用性は計画されていますか (つまり、Nashorn には javax.json.spi.JsonObject のネイティブ サポートが含まれますか)?

編集#1

@ヴィク・ガモフ、

相互運用性とは、実行時に JavaScript / JSON オブジェクトをスクリプトに挿入する方法を意味します。Nashorn では、標準の Java オブジェクトなど、他の JVM 言語のオブジェクトを使用できることを知っています。ただし、誰かが100%javascriptを使用したい場合は、外部から純粋なJSオブジェクトを作成する簡単な方法が必要であり、jlaskeyhannesw(JSObjectに関するコメントによる)およびOracleの他の人/ギャルがそれを実現する方法。

結局のところ、彼らはScriptObjectMirrorを使用してJSObjectのデフォルト実装も提供しています。

4

2 に答える 2

2

Nashorn コードを掘り下げた後、javax.json パッケージへの参照は見つかりませんでした。ただし、JSObjectで次のコメントを見つけました。

このクラスは、任意の Java クラスによってサブクラス化することもできます。Nashorn は、そのようなクラスのオブジェクトを nashorn スクリプト オブジェクトと同様に扱います。obj[i]、obj.foo、obj.func()、delete obj.foo などの通常の nashorn 操作は、このクラスの適切なメソッド呼び出しに接着されます。

JsonObjectJsonArrayを JSObject 実装でラップするのはかなり簡単です。

編集#1

結局のところ、ScriptObjectMirrorクラスは、標準として、または JSObject 自体のデフォルトの実装として使用できます。

于 2013-09-27T23:17:16.500 に答える
1

nashorn および JSR-223 API を使用して、Javascript の任意の Java クラスにアクセスできます。たとえば、Jackson または google gson マッパーを JavaScript コードで使用できます。

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 に答える