gpt4 book ai didi

android - 使用动态数组和对象处理 gson

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:23 25 4
gpt4 key购买 nike

我从 API 得到响应,因为如果存在数据则返回对象,当数据不存在时返回空白数组。我有用于序列化的模型类。这是模型类

    @SerializedName("local")
public Local _local = new Local();
public class Local{
@SerializedName("total")
public String _total;

@SerializedName("providers")
public ArrayList<ProvidersDetails> _providers = new ArrayList<>();

public class ProvidersDetails{
@SerializedName("id")
public String _id;

@SerializedName("image")
public String _image;

}

@SerializedName("admin")
public transient Admin admin = new Admin();

public class Admin{

@SerializedName("id")
public String _id;

@SerializedName("first_name")
public String _first_name;

@SerializedName("last_name")
public String _last_name;

}

@SerializedName("orgn")
public Organization _organization = new Organization();

public class Organization{
@SerializedName("name")
public String _ name;
}
}

这是我从 api 得到的部分响应

       "local":{
"providers":[
{
"id":"1180",
"image":"photo.png"
},
{
"id":"1180",
"image":"photo.png"
},
{
"id":"1180",
"image":"photo.png"
}
],
"admin":{
"id":"1180",
"first_name":"nqgnerq",
"last_name":"gnejbeqp",
},
"orgn":{
"name":"organization name"
}
}

这是当数据不存在时我得到的另一种形式

     "local":{
"total":0,
"providers":[
],
"admin":[
],
"orgn":{
"name":"organization name"
}
}

我已经检查了很多解决方法但都失败了,因为我想在我的 pojo 类中处理它。有没有人有解决办法,请提出建议。

最佳答案

你可以用“JsonDeserializer”来处理它。这是一个例子。 使类 ProvidersDetails 实现 Serializable

像这样创建一个新类

public class ProvidersDetailsList {
public ArrayList<ProvidersDetails> getDetails() {
return providersDetails;
}

ArrayList<ProvidersDetails> providersDetails= new ArrayList<>();
}

现在编写反序列化器。

 public class PhotoAlbumDeserializer implements JsonDeserializer {

@Override
public Object deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
ProvidersDetailsList providersDetailsList= new ProvidersDetailsList ();

JsonObject jsonObject = jsonElement.getAsJsonObject();
if (jsonObject != null) {

JsonElement usersField = jsonElement.getAsJsonObject().get("providers");
if (usersField == null || usersField.isJsonNull() || usersField.isJsonPrimitive())
; // if is null or is a primitive type will return an empty result
else if (usersField.isJsonObject()) {
providersDetailsList.getDetails().add((ProvidersDetails) jsonDeserializationContext.deserialize(usersField, ProvidersDetails.class));

} else if (usersField.isJsonArray()) {
Type listOfUserType = new TypeToken<List<ProvidersDetails>>() {
}.getType();
providersDetailsList.getDetails().addAll((Collection<? extends ProvidersDetails>) jsonDeserializationContext.deserialize(usersField, listOfUserType));
}

}
return providersDetailsList;
}
}

现在这样调用它

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(ProvidersDetailsList.class, new PhotoAlbumDeserializer());
Gson gson = gsonBuilder.create();
ArrayList<ProvidersDetails> providersDetails = gson.fromJson(jsonString, ProvidersDetailsList.class);

这是使用 Gson 执行此操作的链接 https://stackoverflow.com/a/16591621/3111083

关于android - 使用动态数组和对象处理 gson,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38237703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com