Как разобрать Json с помощью Retrofit, если ключ находится внутри другого объекта - PullRequest
0 голосов
/ 25 апреля 2018

Может ли кто-нибудь помочь мне в разборе ниже JSON с помощью модернизации?

{
  "key1": "value",
  "key2": {
           "key3": "value2",
           "key4": "some random text is here"
          },
  "value2" : {
               -- actual data is here ---
             }
}

здесь «значение2» изменится. Я не могу понять, как получить значение «Key3» и получить фактические данные с помощью Retrofit.
Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 25 апреля 2018

Попробуйте это:

try {
        JSONObject jsonObject = new JSONObject("Your_json_string");
        String key1 = jsonObject.optString("key1");
        JSONObject key2 = jsonObject.optJSONObject("key2");

        String value2 = key2.optString("key3");//It will get value

        JSONObject jsonObjectValue2 = jsonObject.optJSONObject(value2);// now use value2 here for actual result
        String finalValue = jsonObjectValue2.optString("next_value");
        //....and so on

    } catch (JSONException e) {
        e.printStackTrace();
    }
0 голосов
/ 25 апреля 2018

вы можете поместить данные json в класс pojo, поместив их в данные json на следующем веб-сайте, где будет сгенерирован класс pojo ..

http://www.jsonschema2pojo.org/

добавить приведенную ниже зависимость в файл gradle уровня приложения.

    implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

затем после того, как вы сделаете модифицированный объект, передайте эту строку ..

 retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .client(client.build())
            .addConverterFactory(GsonConverterFactory.create())
            .build();
0 голосов
/ 25 апреля 2018

Вы можете сделать это следующим образом, допустим, у вас есть JSONObject с вышеупомянутым json.

Вы можете разобрать это как String value = jsonObject.optString("key1");

0 голосов
/ 25 апреля 2018

Retrofit поддерживает converterFactory, вы можете попробовать Gson или Jackson с ним

Найдите пример ниже

Добавить зависимость в gradle,

implementation 'com.squareup.retrofit2:converter-gson:2.3.0'

Java-код

 new Retrofit.Builder().baseUrl(BuildConfig.BASE_URL).
            addConverterFactory(GsonConverterFactory.create()).
            client(okHttpClient).
            build();

 public interface GetAllAPI {
        @GET("/all")
        List<Country> getCountries();
    }
...