2012-02-08 37 views
1
創建一個特定的JSON字符串

當我使用JSON-Lib的項目,我可以用命令創建與GSON

JSONObject jObject = new JSONObject(); 
jObject.accumulate("articles", list); 
String json = jObject.toString(); 

以下的輸出:

{ 
    "articles": [ 
     { 
      "amount": "50", 
      "id": "1", 
      "pct": "50,00", 
      "price": "162,37", 
      "startamount": "100", 
      "stockvalue": "8118,45" 
     }, 
     { 
      "amount": "20", 
      "id": "2", 
      "pct": "20,00", 
      "price": "164,83", 
      "startamount": "100", 
      "stockvalue": "3296,60" 
     }, 
     { 
      "amount": "20", 
      "id": "3", 
      "pct": "20,00", 
      "price": "170,40", 
      "startamount": "100", 
      "stockvalue": "3408,00" 
     },... 
] 
} 

同時我使用GSON項目,並綁在它上面。 但下面的代碼:

Gson gson = new Gson(); 
String json = gson.toJson(list); 

會給我這樣的輸出:

[ 
    { 
     "id": "1", 
     "amount": "50", 
     "startamount": "100", 
     "pct": "50,00", 
     "price": "162,37", 
     "stockvalue": "8118,45" 
    }, 
    { 
     "id": "2", 
     "amount": "20", 
     "startamount": "100", 
     "pct": "20,00", 
     "price": "164,83", 
     "stockvalue": "3296,60" 
    },...] 

我的列表中的元素是如何可以與創建從我的POJO文章

public class Article implements IsSerializable { 
    private String id; 
     private String amount; 
     private String startamount; 
     private String pct; 
     private String price; 
     private String stockvalue; 

     public Article(){ 

     } 

     //Setter & Getter 
} 

對象Gson的一個JSON字符串的幫助就像一個JSON-Lib將創建(帶有包含JSONObjects的JSONArray的JSONObject)。 未來JSON字符串將/必須擴展更多的數組(不是文章,但其他東西)。

我從HttpServlet中檢索這個生成的JSON字符串。將Gson JSON字符串反序列化回ArrayList還是應該使用GWT JavaScript Overlay Types?

感謝& BR, mybecks

回答

2

它發生是因爲你給了Gson一個對象列表。因此,如果您想要獲得與第一個json片段相同的輸出,您必須定義對象,該對象將包含文章列表。例如。 :

public class ArticlesResult { 
    private List<Article> articles; 


    ...//the rest of the code, like getters and setters 
} 

關於將JsArray轉換回ArrayList。這取決於,大多數情況下最好使用疊加類型,因爲它們創建速度更快,並且在生成的JS代碼中佔用的空間較小。但只適用於生產模式。在devmode中,覆蓋圖類型較慢,所以如果您快速訪問覆蓋圖類型,則會浪費很多時間。

1

引述Gson User Guide

GSON是可以用來將Java對象轉換成JSON的表示形式的Java庫。

這意味着您必須提供想要在您序列化爲JSON的Java對象中的JSON字符串中看到的完整結構。

在你的情況下,你需要將你的文章列表包含在一個bean中,這個bean有一個屬性「articles」。

如果需要構建動態結構,Gson可能不是您最好的工具。 您可以將Gson與XML綁定工具(如JAXB)進行比較。與JAXB一起使用的bean結構並不打算在運行時更改。