Модифицированный синтаксический анализ JSON — как определить, существует ли поле данных?

#android #json #retrofit

#Android #json #доработка

Вопрос:

REST API, который я использую, возвращает JSON с данными, чтобы я мог их анализировать. Проблема в том, что если какое-то значение равно 0, API вообще не вернет такое поле. Мне нужно найти способ, как обнаружить это в коде.

JSON без поля данных:

 current 
 dt 1611128505
 sunrise    1611125437
 sunset 1611156927
 temp   2.88
etc
 

JSON с полем данных:

 current 
  dt    1611128505
  sunrise   1611125437
  sunset    1611156927
  temp  2.88
  precip 1.5 <---here
 etc
  
 

Как определить, существуют ли данные?

  Call<RetrofitWeatherPOJO> call = apiInterface.doGetWeather(Lat, Lon, ApiKey, units);
        call.enqueue(new Callback<RetrofitWeatherPOJO>() {
            @Override
            public void onResponse(Call<RetrofitWeatherPOJO> call, Response<RetrofitWeatherPOJO> response) {

    RetrofitWeatherPOJO weatherPOJO = response.body();

    double TempCurrent = weatherPOJO.current.temp;
    double HumCurrent = weatherPOJO.current.humidity;
    double PrercipCurrent = weatherPOJO.current.precipitation; <-- will crash if JSON missing data
 

мой gradle

 implementation 'com.squareup.retrofit2:retrofit:2.5.0'
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
implementation 'com.squareup.okhttp3:logging-interceptor:3.4.1'
 

Класс POJO

   @SerializedName("precipitation")
  @Expose
  public Double precipitation;
 

Ответ №1:

вы можете использовать простой try catch для обработки исключения и предотвращения сбоев, но лучшим способом было бы использовать простую ifкоманду if, чтобы проверить, является ли json нулевым или нет, например

 if (weatherPOJO.current.precipitation != null) {
                //do your thing
        
 }
 

Комментарии:

1. Да, это оно, я думал, что уже попробовал это .. спасибо, чувак

2. ваше приветствие, если это помогло вам, не могли бы вы принять ответ 🙂

Ответ №2:

В идеале это не приведет к сбою, если вы используете gson для сериализации, он будет игнорировать null значения или отсутствующие поля, следовательно, поле / параметр precipitation должен иметь значение по умолчанию.

Комментарии:

1. спасибо, я добавил свой gradle к исходному вопросу, как проверить указанное вами значение по умолчанию? Спасибо