2014-08-27 2 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_ARRAY и сделайте nextString и nextInt и т. Д.).

Смежные вопросы