为了账号安全,请及时绑定邮箱和手机立即绑定

json中多个不同的嵌套对象进行改造

json中多个不同的嵌套对象进行改造

缥缈止盈 2022-03-10 16:14:51
我的 json 图片,请点击1 和2。 希望足够理解。故事:我想读一次 Json 页面。没关系,我对此没有任何问题。我只能读取第一个单元格中的数据。不同类别的其他细胞。而且我通过使用http://www.jsonschema2pojo.org/ 重要!!每个不同的类型,都包含不同的命名对象列表。但是如何通过改造库将每个单元格中的数据获取到不同的类?##精选名单##public class FeaturedList{  //this my main class@SerializedName("featured")private List<FeaturedItem> featured;@SerializedName("type")private String type;@SerializedName("title")private String title;public void setFeatured(List<FeaturedItem> featured){    this.featured = featured;}public List<FeaturedItem> getFeatured(){    return featured;}public void setType(String type){    this.type = type;}public String getType(){    return type;}public void setTitle(String title){    this.title = title;}public String getTitle(){    return title;}@Overridepublic String toString(){    return         "FeaturedList{" +         "featured = '" + featured + '\'' +         ",type = '" + type + '\'' +         ",title = '" + title + '\'' +         "}";    }主要活动     restInsterface = ApiClient.getClient().create(RestInsterface.class);    Call<List<FeaturedList>> listCall;    listCall=restInsterface.getFeaturedList();    listCall.enqueue(new Callback<List<FeaturedList>>() {        @Override        public void onResponse(Call<List<FeaturedList>> call, Response<List<FeaturedList>> response) {            for (FeaturedList item:response.body()){                Log.i(TAG, "onResponse: "+item.toString());            }        }        @Override        public void onFailure(Call<List<FeaturedList>> call, Throwable t) {        }    });      }
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

好吧,我做到了,这是我的解决方案。它有效。


 public class DataList{


@SerializedName("featured")

private List<FeaturedItem> featured;

@SerializedName("products")

private List<ProductsItem> products;

@SerializedName("categories")

private List<CategoriesItem> categories;

@SerializedName("collections")

private List<CollectionsItem> collections;

@SerializedName("shops")

private List<ShopsItem> shops;


@SerializedName("type")

private String type;


@SerializedName("title")

private String title;


public List<FeaturedItem> getFeatured() {

    return featured;

}


public void setFeatured(List<FeaturedItem> featured) {

    this.featured = featured;

}


public List<ProductsItem> getProducts() {

    return products;

}


public void setProducts(List<ProductsItem> products) {

    this.products = products;

}


public List<CategoriesItem> getCategories() {

    return categories;

}


public void setCategories(List<CategoriesItem> categories) {

    this.categories = categories;

}


public List<CollectionsItem> getCollections() {

    return collections;

}


public void setCollections(List<CollectionsItem> collections) {

    this.collections = collections;

}


public List<ShopsItem> getShops() {

    return shops;

}


public void setShops(List<ShopsItem> shops) {

    this.shops = shops;

}


public void setType(String type){

    this.type = type;

}


public String getType(){

    return type;

}


public void setTitle(String title){

    this.title = title;

}


public String getTitle(){

    return title;

}


@Override

public String toString(){

    if(type.equals("featured")){

        return

                "Featured Olanlar{" +

                        "featured = '" + featured + '\'' +

                        ",type = '" + type + '\'' +

                        ",title = '" + title + '\'' +

                        "}";

    }

    else if(type.equals("new_products")){

        return

                "En Yeni Ürünler{" +

                        "products = '" + products + '\'' +

                        ",type = '" + type + '\'' +

                        ",title = '" + title + '\'' +

                        "}";

    }

    else if(type.equals("categories")){

        return

                "Kategoriler{" +

                        "categories = '" + categories + '\'' +

                        ",type = '" + type + '\'' +

                        ",title = '" + title + '\'' +

                        "}";

    }

    else if(type.equals("collections")){

        return

                "Koleksiyonlar{" +

                        "collections = '" + collections + '\'' +

                        ",type = '" + type + '\'' +

                        ",title = '" + title + '\'' +

                        "}";

    }

    else if(type.equals("editor_shops")){

        return

                "Editör Seçimi Vitrinler{" +

                        "shops = '" + shops + '\'' +

                        ",type = '" + type + '\'' +

                        ",title = '" + title + '\'' +

                        "}";

    }

    else if(type.equals("new_shops")){

        return

                "En Yeni Vitrinler{" +

                        "shops = '" + shops + '\'' +

                        ",type = '" + type + '\'' +

                        ",title = '" + title + '\'' +

                        "}";

    }

    return null;

    }  

        }



查看完整回答
反对 回复 2022-03-10
?
慕神8447489

TA贡献1780条经验 获得超1个赞

可以解析同一级别的对象的不同命名。在一种方式中,可以定义@SerializedName(value="name1", alternate={"name2", "name3"}) String b;含义,定义对象的替代名称。但要小心这个对象需要有相同的数据。在您的情况下,它将在所有情况下解析"id""name",因为 json 在所有情况下都包含这两个字段。

另一方面,当您想要解析所有字段时,最好使用自定义JsonDeserializer。您可以在此处找到如何为 GSON 库编写自己的反序列化器的示例:反序列化器


查看完整回答
反对 回复 2022-03-10
  • 2 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信