簡體   English   中英

XPage JSON庫能否自動將Java Bean轉換為JSON表示?

[英]Can the XPage JSON library automatically convert a Java Bean to a JSON representation?

我想使用XPages運行時附帶的com.ibm.commons.util.io.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安全屬性文件,如果服務器升級則該文件又被擦除。

com.ibm.commons.util.io.json庫是一個genric庫,用於將JSON表示轉換為Java對象。 通用,我的意思是它使用工廠來瀏覽和更新Java對象(參見:JsonFactory)。 通過實現這樣的工廠,並為所有屬性實現getter / setter,可以序列化/反序列化任何類型的對象。 JSON庫配備了一組預定義的工廠:

  • JsonJavaFactory,它將JSON對象映射到Java Maps(使用擴展版本,使用更方便的JsonJavaObject包裝器)
  • JsonJavaScriptFactory,它將JSON對象映射到實際的JavaScript對象(請參閱:ObjectObject),將Java值(String,Integer ...)映射到JavaScript值(FBSString,FBSNumber ...)。 這些對象可以由服務器端JS引擎直接使用。

我們說JavaBeans沒有工廠,但實施這樣的工廠應該不是什么大問題。

json的ibm commons庫通過構造一個對象,然后將json屬性添加到該對象來工作。 它不能自動序列化對象,並且只能用於原始數據類型。

我附上了一些SSJS代碼來說明如何使用該類。 它假設recordMap是一個包含一些bean的java map實例,每個bean有5個名為fieldName1到fieldName5的字段。 代碼遍歷映射中的每個bean,檢索5個字段,將值轉換為JSON,然后將它們推送到數組中。 最后,將數組放入另一個包含count的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;

希望這可以幫助..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM