2015-05-26 79 views
0

上下文:我正在開發一個像CMS系統一樣工作的中間人服務。我得到一個完整複雜的json文件,放在我的服務器上,然後我需要向希望json內容的客戶提供服務。 (讓我們暫時忽略驗證部分)將嵌套的json數據解析爲字符串

我有一個名稱,版本和內容字段存在於頂層。內容(章節)以嵌套複雜對象(〜5層深)的數組形式存在。

{ 
    "name": "MyCourse", 
    "version": 12345, 
    "chapters": [ 
    { 
     "name": "Chapter01", 
     "content": { 
     "menu": { 
      "id": "Chapter01_EndMenu", 
      "file": "ch1_end_op.wav" 
     }, 
     "score": { 
      "id": "Chapter01_Score", 
      "files": [.... 

我試過什麼(工作):建立我的POJO,以反映在內容(章)存在複雜的對象列表的JSON結構。在這個工程上調用gson解析器。

我想要做的事:曾經使用過的名稱,版本和內容,其中內容只是存儲數組表示(章節和嵌套對象)作爲一個String一個簡單的POJO。

我嘗試在pojo中將我的內容字段定義爲字符串,並將@SerializedName註解設置爲強制gson將數組解析爲字符串,但這不起作用。

是否有可能部分獲取json作爲字段,並獲得(嵌套數組的)其餘部分到我的pojo中的字符串字段?

+0

你想擁有'chapters' json字符串,因爲它在POJO'content'字符串變量中嗎? –

+0

是的,這是正確的。因爲它不會以任何方式影響我的服務,所以章節數組幾乎太深,太多開銷(嵌套pojo明智)來維護。 – kosh

回答

2

這很簡單,在JSONObject你可以得到JSON字符串,因爲它使用的是按鍵。

String jsonString = "{ \"name\": \"MyCourse\", \"version\": 12345, \"chapters\": [ {  \"name\": \"Chapter01\"}]}"; 
JSONObject jsonObject = new JSONObject(jsonString); 
Details details = new Details(); 
details.setName(jsonObject.get("name")); 
details.setVersion(jsonObject.get("version")); 
details.setChapters(jsonObject.get("chapters")); 

您可以試試這個。

0

您可以爲String數據類型定義自己的適配器。

E.g。 :

GsonBuilder builder = new GsonBuilder(); 
builder.registerTypeAdapter(String.class, new JsonDeserializer<String>() { 
       public String deserialize(JsonElement json, Type typeOfT, 
         JsonDeserializationContext context) 
         throws JsonParseException { 
        return json.toString(); 
       } 
}); 

Gson gson = builder.create(); 

現在它可以將字符串數據存儲爲字符串。