2012-03-14 5 views
2

XPagesランタイムに付属のcom.ibm.commons.util.io.json。*ライブラリーを使用して、Java BeanをJSONにシリアライズしたいとします。XPage JSONライブラリは自動的にJava BeanをJSON表現に変換できますか?

Googleライブラリでできるように、オブジェクトを渡すだけで自動的に行うことができますか(http://code.google.com/p/google-gson/)、JSONを手動で構築して個々のプロパティを渡してJSONを構築する必要がありますか。理想的には

http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=JSON%20and%20REST%20Samples

http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Sending_requests_in_Java_dds10

我々はそれが素晴らしい作品にもかかわらず、サードパーティのライブラリを使用したくない:私はいくつかの例を見てきましたが、トラブルこのライブラリのドキュメントを見つけるを持つ

これは、サーバーがアップグレードされた場合に消去されるJavaセキュリティー・プロパティー・ファイルを変更する必要があるためです。

答えて

5

json用のibmコモン・ライブラリーは、オブジェクトを作成し、そのオブジェクトにjsonプロパティーを追加することによって機能します。オブジェクトを自動シリアライズすることはできず、実際にはプリミティブなデータ型でのみ機能します。

クラスの操作方法を示すためにSSJSコードを添付しました。 recordMapは、いくつかのBeanを含むJavaマップインスタンスであり、各BeanにはfieldName1からfieldName5という5つのフィールドがあります。このコードはマップ内の各Beanを反復処理し、5つのフィールドを取得し、値をJSONに変換して配列にプッシュします。最後に、配列は、カウントと配列自体を含む別のjsonオブジェクトの中に入れられます。

var jsonObjArr = []; 

var itr:java.util.Iterator = recordMap.keySet().iterator(); 
while (itr.hasNext()) { 

    var record = recordMap.get(itr.next()); 
    var jsonObj:com.ibm.commons.util.io.json.JsonJavaObject = 
      new com.ibm.commons.util.io.json.JsonJavaObject(); 

    jsonObj.putJsonProperty("fieldName1", record.getFieldName1()); 
    jsonObj.putJsonProperty("fieldName2", record.getFieldName2()); 
    jsonObj.putJsonProperty("fieldName3", record.getFieldName3()); 
    jsonObj.putJsonProperty("fieldName4", record.getFieldName4()); 
    jsonObj.putJsonProperty("fieldName5", record.getFieldName5()); 
    jsonObj.putJsonProperty("fieldName6", record.getFieldName6()); 

    jsonObjArr.push(com.ibm.commons.util.io.json.JsonGenerator 
     .toJson(com.ibm.commons.util.io.json.JsonJavaFactory.instanceEx, empr)); 

}; 

var jsonString = "{" + 
    "count:" + @Text(jsonObjArr.length) + "," + 
    "employees:" + "[" + jsonObjArr.join(",") + "]" + 
"}"; 

return jsonString; 

・ホープ、このことができます。..

+0

ありがとう、ジェレミーは助けますが、それは理想的ではありません。 Java Securityのプロパティを変更することなく、GSONライブラリをフレームワークにフォールディングする方法があると思いますか? – markbarton

+0

私はライブラリを見なければなりませんが、そこには問題はあまりないと思っています。セキュリティマネージャーがそれに不平を言うことはあまりありません。 –

13

com.ibm.commons.util.io.jsonライブラリは、前後に、JavaオブジェクトにJSON表現を変換するためのgenricライブラリです。ジェネリックでは、ファクトリを使ってJavaオブジェクトをブラウズして更新することを意味します(JsonFactory参照)。このようなファクトリを実装し、すべてのプロパティのgetter/setterを実装することで、あらゆる種類のオブジェクトを直列化/逆シリアル化できます。 JSONライブラリがあらかじめ定義された工場のセットが装備されています。そのマップ、

  • マップJSONは、JavaマップにオブジェクトのことをJsonJavaFactory、(より便利であるJsonJavaObjectラッパーを使用して拡張されたバージョンと)
  • JsonJavaScriptFactory JSONオブジェクトから実際のJavaScriptオブジェクト(ObjectObject参照)、Java値(String、Integer ...)からJavaScript値(FBSString、FBSNumber ...)これらのオブジェクトは、サーバー側のJSエンジンで直接使用できます。

私たちはJavaBeansのファクトリを持っていませんが、このようなファクトリの実装は大きな問題ではありません。

関連する問題