简体   繁体   English

使用翻新gson解析动态JSON节点

[英]Parsing Dynamic JSON node with retrofit gson

I'm using Woo-Commerce RestApi v2, using Retrofit for api calling. 我正在使用Woo-Commerce RestApi v2,将Retrofit用于api调用。 when I'm fetching all category. 当我获取所有类别时。 There was a node name image , it returns blank array but when image uploaded it returns object. 有一个节点名image ,它返回空白数组,但是当上载图像时,它返回对象。 Here is my JSON sample 这是我的JSON示例

[
    {
    "id": 15,
    "name": "Albums",
    "slug": "albums",
    "parent": 11,
    "description": "",
    "display": "default",
    "image": [],
    "menu_order": 0,
    "count": 4
    },
    {
    "id": 9,
    "name": "Clothing",
    "slug": "clothing",
    "parent": 0,
    "description": "",
    "display": "default",
    "image": {
    "id": 730,
    "date_created": "2017-03-23T00:01:07",
    "date_created_gmt": "2017-03-23T03:01:07",
    "date_modified": "2017-03-23T00:01:07",
    "date_modified_gmt": "2017-03-23T03:01:07",
    "src": "https://example.com/wp-content/uploads/2017/03/T_2_front.jpg",
    "title": "",
    "alt": ""
    },
    "menu_order": 0,
    "count": 36
    }
]

The main problem with image node. 图像节点的主要问题。 How to create model class for that node. 如何为该节点创建模型类。 I used jsonschema2pojo.org for generate model class but that class only works, When I remove image from class. 我使用jsonschema2pojo.org生成模型类,但是当我从类中删除image时,该类才有效。 can you guide me what to do? 你能指导我怎么做吗? Any help would be appreciated. 任何帮助,将不胜感激。

 ApiInterface apiService= ApiClient.getWooCommerceClient().create(ApiInterface.class);
    Call<List<Category>> call=apiService.getAllCategories();
    call.enqueue(new Callback<List<Category>>() {
        @Override
        public void onResponse(@NonNull Call<List<Category>> call, @NonNull Response<List<Category>> response) {
            categoryList.addAll(response.body());
            adapter.notifyDataSetChanged();
        }
        @Override
        public void onFailure(@NonNull Call<List<Category>> call, @NonNull Throwable t) {

        }
    });

You can do it by removing the @Expose annotation and use Gson gson = new GsonBuilder().create(); 您可以通过删除@Expose注释并使用Gson gson = new GsonBuilder().create(); at the Gson constructor. Gson构造函数中。 The unfounded data will be set to null . 毫无根据的数据将设置为null

Try this . 尝试这个 。

Use Image as String 使用Image作为String

Category 类别

public class Category {
/**
 * id : 15
 * name : Albums
 * slug : albums
 * parent : 11
 * description :
 * display : default
 * image : []
 * menu_order : 0
 * count : 4
 */

private int id;
private String name;
private String slug;
private int parent;
private String description;
private String display;
private int menu_order;
private int count;
private String image;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getSlug() {
    return slug;
}

public void setSlug(String slug) {
    this.slug = slug;
}

public int getParent() {
    return parent;
}

public void setParent(int parent) {
    this.parent = parent;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public String getDisplay() {
    return display;
}

public void setDisplay(String display) {
    this.display = display;
}

public int getMenu_order() {
    return menu_order;
}

public void setMenu_order(int menu_order) {
    this.menu_order = menu_order;
}

public int getCount() {
    return count;
}

public void setCount(int count) {
    this.count = count;
}

public String getImage() {
    return image;
}

public void setImage(String image) {
    this.image = image;
}
}

Use in response 回应使用

@Override
public void onResponse(@NonNull Call<List<Category>> call, @NonNull Response<List<Category>> response) {
    categoryList.addAll(response.body());
    for (int i = 0; i < categoryList.size(); i++) {
        if(!categoryList.get(i).getImage().contains("[")){
            image = categoryList.get(i).getImage();
            try {
                JSONObject jsonObject = new JSONObject(image);
                String imageUrl = jsonObject.getString("your_key");
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }
    adapter.notifyDataSetChanged();
}

If it contains [ ,you can't do any thing . 如果包含[ ,您将无法执行任何操作。

Else you can parse it in your code . 否则,您可以在代码中对其进行解析。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM