2014-08-27 62 views
0

我需要映射一個JSON對象使用GSON類,這裏是JSON對象:沒有實體名稱GSON映射

{ 
    "protocols": [ 
      [ "https", 39 ], 
      [ "http", 1 ] 
     ], 
    ... 
} 

一般來說,如果有實體名稱指定很容易做這樣的事情是:

{ 
    "protocols": [ 
      [ "name":"https", "count":39 ], 
      [ "name":"http", "count":1 ] 
     ], 
    ... 
} 

class ProtocolItem { 
    @SerializedName("name") 
    String protocolName; 

    @SerializedName("count") 
    int count; 
} 

但是由於在這種情況下沒有指定實體名稱,所以我不確定如何爲此執行映射。如果您熟悉案例,請爲我指出一些方向。

感謝

回答

0

不像你的第一個例子,

[ "name":"https", "count":39 ], 

是無效的JSON,你可以指定使用[1, 2]沒有任何名字或使用{"x": 1, "y": 2}與「實體名稱」作爲鍵映射的數組。所以解決方案很簡單:

{ 
    "protocols": [ 
      [ "https", 39 ], 
      [ "http", 1 ] 
     ], 
} 

是一個具有單個鍵和值的對象數組數組。您可以映射它作爲

class All { 
    Object[][] protocols; 
} 

此處必須使用Object,因爲它需要接受兩個字符串和整數。您可以使用List s來代替陣列。

我猜,你寧願序列化作爲

class All { 
    Map<String, Integer> protocols; 
} 

這是可能的,也是如此,但你需要一個TypeAdapter。第一個鏈接的例子清楚地說明了如何做到這一點(以beginArray開始,在循環測試JsonToken.BEGIN_ARRAYnextStringnextInt等中開始)。