如何通过服务器收到的数据来解析包含键的不同值的数据?
{ "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;
}
}