Android Gson - десериализация пустых и отсутствующих значений - PullRequest
1 голос
/ 04 октября 2019

Я бы хотел понять разницу с сервером, возвращающим значение, когда это значение полностью отсутствует в ответе.

давайте возьмем то, что у меня есть:

data class MyApiResponse(@SerializedName("name") val name: String,
                                  @SerializedName("address") val address: String,
                                  @SerializedName("max_time") val maxTime: Double? = null //this field  might  BE  COMPLETELY absent in response, what will  happen  here ? 
)

относительно значения maxTime, если значение полностью отсутствует в ответе сервера, произойдет ли сбой приложения или значение будет нулевым?

проблема в том, что я пытаюсь различить отправку сервером

max_time: null против когда он полностью отсутствует , как gson справляется с этим?

Ответы [ 2 ]

1 голос
/ 04 октября 2019

В обоих случаях оно будет нулевым. Здесь можно посмотреть дополнительную информацию: необязательные и обязательные поля Gson

0 голосов
/ 04 октября 2019

Пожалуйста, попробуйте это решение:

    String json = ""; //Your json has a String
    JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject();


    String name = jsonObject.get("name").toString();
    String adress = jsonObject.get("address").toString();
    //If null, use a default value
    JsonElement max_time = jsonObject.get("max_time");
    String text = (max_time instanceof JsonNull) ? "" : max_time.getAsString();




    String json = ""; //Your json has a String
    Gson gson = new GsonBuilder().serializeNulls().create();
    MyApiResponse myApiResponse = gson.fromJson(json, YOURCLASSNAME.class);
...