2016-08-12 3 views
3

У меня проблема с одним типом JSON.Retrofit - parse JSON

Пример:

{ 
    "1": "name", 
    "2": "example", 
    "3": "loremipsum", 
    "4": "etc", 
} 

Я всегда преобразования JSON в Pojo с Gson. Я использую Дооснащение 1.9

Но в этом случае его глупо, потому что я получаю объект как:

public class Example { 

    @SerializedName("1") 
    @Expose 
    private String _1; 
    @SerializedName("2") 
    @Expose 
    private String _2; 
    @SerializedName("3") 
    @Expose 
    private String _3; 
    @SerializedName("4") 
    @Expose 
    private String _4; 
    ......... 

Как я могу разобрать этот JSON, чтобы получить список объектов, таких как:

public class Example { 
    private int id; 
    private String value; 
} 

Спасибо для помощи.

+0

Я думаю, что вы это необходимо: - Ramit

ответ

0

Я нашел решение:

Я использовал Gson.JsonObject в ответ

И позже:

Type type = new TypeToken<Map<String, String>>(){}.getType(); 
    Map<String, String> myMap = new Gson().fromJson(jsonObject.toString(), type); 
1

Если JSON имеет переменные ключи, вы должны десериализации его вручную, так что я думаю, что лучшее решение изменить свой ответ JSON на:

[ 
     {"id" : 1, "value" : "name"}, 
     {"id" : 2, "value" : "example"} 
    ] 

и

public class Response { 
    public Example[] examples; 
} 
0

Поскольку ваши переменные ключи , трудно разобрать GSON.

Но вы можете использовать JSONObject, чтобы сделать это, и это действительно просто. Существует код, я проверить это, он прекрасно работает:

private ArrayList<Example> parseJson() throws JSONException { 
    String json = "{\n" + 
      " \"1\": \"name\",\n" + 
      " \"2\": \"example\",\n" + 
      " \"3\": \"loremipsum\",\n" + 
      " \"4\": \"etc\"\n" + 
      "}"; 

    ArrayList<Example> exampleList = new ArrayList<>(); 
    JSONObject jsonObject = new JSONObject(json); 
    Iterator<String> iterator = jsonObject.keys(); 
    while(iterator.hasNext()) { 
     Example example = new Example(); 
     String id = iterator.next(); 
     example.id = Integer.parseInt(id); 
     example.value = jsonObject.getString(id); 

     exampleList.add(example); 
    } 
    return exampleList; 
}