2017-08-07 26 views
0

我想使用改裝2.我的JSON響應看起來像這樣獲取JSON響應其動態密鑰JSON數組:如何分析利用改造2

[ 
    0 : { 
     type : "video", 
     format : "mp4", 
     size : "10mb" 
     }, 
    1 : { 
     type : "audio", 
     format : "mp3", 
     size : "10mb" 
     }, 
    2 : { 
     type : "text", 
     format : "pdf", 
     size : "10mb" 
     } 
] 

應該如何我的模型類是什麼樣子?我無法理解,因爲它具有動態密鑰。

+0

你用什麼庫來解析? GSON?傑克遜?無論如何,這是一個數組,因此將它解析爲一個類(具有類型,格式和大小)的數組應該是直截了當的。 –

+0

我正在使用gson –

+0

,因爲他們已經說過,json是無效的,一旦有效,你就不應該有任何問題來解析它。我附上一個例子 –

回答

5

這不是一個有效的JSON,你可以嘗試在https://jsonlint.com/,你可以改變你的迴應:

[ 
    { 
     "type":"video", 
     "format":"mp4", 
     "size":"10mb" 
    }, 
    { 
     "type":"audio", 
     "format":"mp3", 
     "size":"10mb" 
    }, 
    { 
     "type":"text", 
     "format":"pdf", 
     "size":"10mb" 
    } 
] 
3

首先這是無效的/不完整的JSON。有效的版本將是這個樣子

{ 
    "items": [ 
    { 
     "0": { 
     "type": "video", 
     "format": "mp4", 
     "size": "10mb" 
     } 
    }, 
    { 
     "1": { 
     "type": "audio", 
     "format": "mp3", 
     "size": "10mb" 
     } 
    }, 
    { 
     "2": { 
     "type": "text", 
     "format": "pdf", 
     "size": "10mb" 
     } 
    } 
    ] 
} 

,它會安全地反序列化到這個

class Item{ 
     String type; 
     String format; 
     String size; 
    } 

    class Response{ 
     List<Map<Integer,Item>> items; 
    } 


//.... 

Response response = new Gson().fromJson(yourJson, Response.class); 

作爲替代方案,因爲我相信你無法改變的JSON格式,更改[ ]爲{}在JSON字符串和反序列化像這樣

Map fieldMap = (Map)new Gson().fromJson(json, Map.class); 

它應該給你的所有數據的LinkedTreeMap

+0

爲什麼要列出地圖?,json應該更簡單,就像@Arash提供的那樣。響應應該是一個項目清單。 –

+0

我不確定0:{something}在GSON中像list.add(0,something)一樣工作。 「:」 通常意味着鍵/值。 [「1」,「2」,「3」]:這肯定會反序列化成一個有效的java列表。 – Nick

+0

但是,如果您要更改json以使其有效,您可以更改... –

2

所以,人們已經說了,如果你改變你的JSON是有效的:

[ 
    { 
     "type":"video", 
     "format":"mp4", 
     "size":"10mb" 
    }, 
    { 
     "type":"audio", 
     "format":"mp3", 
     "size":"10mb" 
    }, 
    { 
     "type":"text", 
     "format":"pdf", 
     "size":"10mb" 
    } 
] 

然後你就可以創建類,例如:

public class Test { 
    public String type; 
    public String format; 
    public String size; 
} 

,然後用GSON:

Type testType = new TypeToken<ArrayList<Test>>(){}.getType(); 
ArrayList<Test> list = new Gson().fromJson(json, testType); 

另一方面,通過retrofit2你可以得到Gson converter爲你做這項工作。