Простой способ разбора пары ключ-значение json - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу разобрать JSON.Я знаю модернизацию и работаю над ней, но не знаю, как разобрать json ниже, поскольку он не в правильном формате.

Пожалуйста, помогите мне в решении этой проблемы.Количество университетов в json не является статичным, они будут меняться.

{
    "transactionid": "7ec7d209589ce2abdb2e555c26776c85",
    "returncode": "200",
    "returnmsg": "success",
    "university": {
        "1": "Anna University",
        "3": "Technological University",
    }
}

1 Ответ

0 голосов
/ 07 декабря 2018

Вы можете использовать JsonDeserializer, импортировать в свой файл Gradle

com.squareup.retrofit2: converter-gson: 2.1.0

и использовать класс ниже

 public static class MyDeserializer implements JsonDeserializer<YourResponseModel> {

    @Override
    public YourResponseModel deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        YourResponseModel response = new YourResponseModel();
        JsonObject jsonObject = json.getAsJsonObject();
        JsonObject university = jsonObject.getAsJsonObject("university");
        ArrayList<String> universities = new ArrayList<>();
        try {
            JSONObject object = new JSONObject(university.toString());
            Iterator<String> iter = object.keys();
            while (iter.hasNext()) {
                String key = iter.next();
                try {
                    String value = object.getString(key);
                    universities.add(value);
                } catch (JSONException e) {
                    Log.e(TAG, "deserialize: ",e );
                }
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }
        response.university = universities;
        return response;
    }
}

Создайте новый GsonBuilder для JsonDeserializer

Gson gson = new GsonBuilder()
                .registerTypeAdapter(YourResponseModel.class, new MyDeserializer())
                .create();

и, наконец, установите его в Retrofit Builder

 Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .addConverterFactory(GsonConverterFactory.create(gson))
                .build();

Вы можете получить дополнительную информацию из этого блог

...