Десериализовать странный json с помощью модификации и Gson

Мне нужно десериализовать этот json:

    {    
    "17": {
       "entity_id": "17",
       "attribute_set_id": "4",
       "type_id": "virtual",
       },
    "18": {
       "entity_id": "18",
       "attribute_set_id": "9",
       "type_id": "virtual"
       }
    }

но с помощью Retrofit и Gson это кажется невозможным.

OkHttpClient client = new OkHttpClient.Builder()
                .addInterceptor(new SigningInterceptor(consumer))
                .readTimeout(60, TimeUnit.SECONDS)
                .connectTimeout(60, TimeUnit.SECONDS)
                .build();

        retrofit = new Retrofit.Builder()
                .baseUrl("http://endpoint/")
                .client(client)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

Итак, как я могу десериализовать это существо? Какой тип я могу использовать?


person Luiz Alegria    schedule 10.05.2016    source источник
comment
вы можете объявить объект с entity_id и другим атрибутом, тогда ваш класс ответа сервера будет иметь только этот объект   -  person Oussema Aroua    schedule 11.05.2016


Ответы (2)


Это карта, где "17" — ключ, а

{ "entity_id": "17", "attribute_set_id": "4", "type_id": "virtual", }

является объектом.

Попробуйте ХэшМап.

person Prakash    schedule 10.05.2016

Вы можете создать класс Java (скажем, Item) для включения переменных-членов (entity_id, attribute_set_id и type_id). Gist и используйте JSONObject, чтобы сделать что-то вроде этого:

JSONObject yourJSON = new JSONObject(jsonString);
//This will iterate through 17, 18, etc
Iterator<String> keysIterator = yourJSON .keys();
while(keysIterator.hasNext()) {
   String key = keysIterator.next();
   JSONObject actualObj = (JSONObject)yourJSON.get(key);
   //Here, supposing you had defined Item class, using Gson, you'd do this:
   Item thisItem = (new Gson()).fromJson(actualObj.toString(), Item.class);
   //From here you can call thisItem.getEntityId(), etc 
}
person ishmaelMakitla    schedule 10.05.2016