GSON用不同的数据解析相同的密钥



如何通过服务器收到的数据来解析包含键的不同值的数据?

{ "location":[{"id":"1"},{"id":"2"}]}

{"location":{"id":"1"}}

不知道如何处理以下对象:

   public class UserLocation {
    @SerializedName("location")
    List<String> location; / String location;
   @SerializedName("name")
    String name;
}

在第一个请求中,我确实获得了数组格式,在第二个请求中,我确实从服务器获得字符串格式。

您必须使用自定义避难所化:

JsonDeserializer<UserLocation> deserializer = new JsonDeserializer<UserLocation>() {
                @Override
                public UserLocation deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
                    List<String> location  = new ArrayList<>();
                    if(json.isJsonArray()){
                        JsonArray jsonArray = json.getAsJsonArray();
                        for (JsonElement jsonElement : jsonArray) {
                            location.add(jsonElement.getAsString());
                        }
                    }else{
                        location.add(json.getAsString());
                    }
                    return  new UserLocation(location);
                }
            };
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(UserLocation.class, deserializer);
Gson customGson = gsonBuilder.create();
UserLocation object = customGson.fromJson(jsoninput, UserLocation.class);

检查此链接以获取更多详细信息

创建一个具有位置和位置列表的类,然后序列化该类对象,请参见下面的示例。

userLocation.java

public class UserLocation{
@SerializedName("location")
@Expose
private MyLocation myLocation;
}

mylocation.java

public class MyLocation{

private List<Location> locationList = null;

private Location location;
}

location.java

public class Location {
 @SerializedName("id")
 @Expose
 private String id;
 public String getId() {
 return id;
}
 public void setId(String id) {
 this.id = id;
}
 }

最新更新