この質問はとっくの昔に頼まれました、答えはまだ正しいように見えました。 JavaとJavascriptの間で複雑なオブジェクトを渡そうとしている他の人にとって興味がある場合は、私の解決策を提示したいと思います。
NativeObjectを(メモリ内の)JSONオブジェクトに変換するスクリプトを作成しました(実際には私はMongoDBのBSONベースのオブジェクトを使用しますが、下記のサンプルコードではJSONArrayとJSONObjectの代わりに1-1を使用できます)。
したがって、たとえば、関心のある「リターン」いくつかのオブジェクトや配列、私は(ユーザー)スクリプト「create_object_script」を持っていると言う、次のように私は、JSON(つまり、ハッシュマップのリスト)に変換することができます:
を
Object returnVal = engine.eval(create_object_script);
engine.put("output", returnVal);
BasicDBObject objFactory = new BasicDBObject(); // (or JSON equivalent)
BasicDBList listFactory = new BasicDBList(); // (or JSON equivalent)
BasicDBList outList = new BasicDBList(); // (or JSON equivalent)
engine.put("objFactory", objFactory);
engine.put("listFactory", listFactory);
engine.put("outList", outList);
engine.eval(parsing_script); // (described below)
// "outList" is now populated with (in-memory) JSON representations of "returnVal"
「create_object_script」スクリプトを制御できる場合は、これを1ステップで行うことができます。私のスクリプトはユーザによって生成されるので、この複雑さを隠すことが必要です。ユーザは、「戻り値」が最終行であるスクリプトを書くだけです。
この投稿の長さを維持するために、「parsing_script」hereを取得しました。
機能上、これは非常にうまく機能します。私はJSでそれほど多くを開発していないので、これを行うより効率的な方法がある可能性があります。 (私はあなたがBasicDBObject "outObj"を渡して、シングルトンの場合の代わりにそれを書くことができないなら、常にリストに結果を必要とします)。
昨日の午前1時に自分の状況で自分を見つけた人に役立ちます。