使用布尔或对象字段反序列化json

时间:2018-06-06 13:08:47

标签: java android json gson retrofit

我使用RetrofitGSON而我正在让Json这样:

{
    "firstName": "John",
    "lastName": "Doe",
    "passporRf": {
        "number": "996633",
        "series": "1111",        
        "code": "66666"
    }

}

当用户doenst有护照时 - 这个字段是布尔值,带有“false”值。

如何正确反序列化并获取布尔值 - false,当此字段为布尔值并在其对象时获取JSON对象。 我找到了JSONDeserializer,但我无法正确使用它。代码是:

public class DocumentDeserializer implements JsonDeserializer<Passport> {


    @Override
    public Passport deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
        JsonPrimitive primitive = json.getAsJsonPrimitive();
        if (primitive.isBoolean()) {
            // What value do i have to return here?
        }
        return context.deserialize(json, Passport.class);
    }
}

2 个答案:

答案 0 :(得分:0)

不要使用GSon或任何其他绑定库。没有什么可以绑定到“布尔值或对象”,所以不要尝试。

使用JSON解析器,查看JSON内容以获取所需信息。可能会从您可以找到的信息中构建一个User对象。

答案 1 :(得分:0)

代码如下,

Sample.class

import com.google.gson.Gson;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.List;

/**
 * Class containing news information in form of POJO.
 */
public class Sample {


  public String firstName;


  public String lastName;


  private List<SampleOne> passporRf;

  public List<SampleOne> getPassporRf() {
    return passporRf;
  }

  private void setPassporRf(List<SampleOne> passporRf) {
    this.passporRf = passporRf;
  }

  // Using custom DeSerializer for "multimedia" object since the API is just "Great"
  public static class SampleDetailsDeSerializer implements JsonDeserializer<Sample> {

    @Override
    public Sample deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
      Sample accountState = new Gson().fromJson(json, Sample.class);
      JsonObject jsonObject = json.getAsJsonObject();

      if (jsonObject.has("passporRf")) {
        JsonElement elem = jsonObject.get("passporRf");
        if (elem != null && !elem.isJsonNull()) {
          if(elem.isJsonPrimitive()){
            accountState.setPassporRf(null);
          } else {
            final List<SampleOne> passporRfList = new Gson().fromJson(elem.getAsJsonArray().toString()
              , new TypeToken<List<SampleOne>>(){}.getType());
            accountState.setPassporRf(passporRfList);
          }
        }
      }
      return accountState ;
    }
  }

}

SampleOne.class

public class SampleOne {
  public String number;
  public String series;
  public String code;
}

希望它可以帮到你。