这是对previously asked question的跟进。如何解析包含项目数组的JSON对象,请参阅以下JSON响应链接?响应太大了,我想把它放在google drive here中。
我正在使用http://www.jsonschema2pojo.org/
来创建POJO。我的代码如下
public void onResponse(Call call, Response response) throws IOException {
String mMessage = response.body().string();
if (response.isSuccessful()) {
try {
Gson gson = new Gson();
ProductsByCategory items = gson.fromJson(mMessage, ProductsByCategory.class);
response.close();
} catch (Exception e) {
Log.e("Error", "Failed to upload");
e.printStackTrace();
}
} else {
errorMessage(mMessage);
}
}
调试项目时,我发现所有项目都为空。这可以通过GSON实现,还是必须使用另一个库:
ProductsByCategory
类如下:
public class ProductsByCategory{
@SerializedName("id")
@Expose
private Integer id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("slug")
@Expose
private String slug;
@SerializedName("permalink")
@Expose
private String permalink;
@SerializedName("date_created")
@Expose
private String dateCreated;
@SerializedName("date_created_gmt")
@Expose
private String dateCreatedGmt;
@SerializedName("date_modified")
@Expose
private String dateModified;
@SerializedName("date_modified_gmt")
@Expose
private String dateModifiedGmt;
@SerializedName("type")
@Expose
private String type;
@SerializedName("status")
@Expose
private String status;
@SerializedName("featured")
@Expose
private Boolean featured;
@SerializedName("catalog_visibility")
@Expose
private String catalogVisibility;
@SerializedName("description")
@Expose
private String description;
@SerializedName("short_description")
@Expose
private String shortDescription;
@SerializedName("sku")
@Expose
private String sku;
@SerializedName("price")
@Expose
private String price;
@SerializedName("regular_price")
@Expose
private String regularPrice;
@SerializedName("sale_price")
@Expose
private String salePrice;
@SerializedName("date_on_sale_from")
@Expose
private Object dateOnSaleFrom;
@SerializedName("date_on_sale_from_gmt")
@Expose
private Object dateOnSaleFromGmt;
@SerializedName("date_on_sale_to")
@Expose
private Object dateOnSaleTo;
@SerializedName("date_on_sale_to_gmt")
@Expose
private Object dateOnSaleToGmt;
@SerializedName("price_html")
@Expose
private String priceHtml;
@SerializedName("on_sale")
@Expose
private Boolean onSale;
@SerializedName("purchasable")
@Expose
private Boolean purchasable;
@SerializedName("total_sales")
@Expose
private Integer totalSales;
@SerializedName("virtual")
@Expose
private Boolean virtual;
@SerializedName("downloadable")
@Expose
private Boolean downloadable;
@SerializedName("downloads")
@Expose
private List<Object> downloads = null;
@SerializedName("download_limit")
@Expose
private Integer downloadLimit;
@SerializedName("download_expiry")
@Expose
private Integer downloadExpiry;
@SerializedName("external_url")
@Expose
private String externalUrl;
@SerializedName("button_text")
@Expose
private String buttonText;
@SerializedName("tax_status")
@Expose
private String taxStatus;
@SerializedName("tax_class")
@Expose
private String taxClass;
@SerializedName("manage_stock")
@Expose
private Boolean manageStock;
@SerializedName("stock_quantity")
@Expose
private Integer stockQuantity;
@SerializedName("in_stock")
@Expose
private Boolean inStock;
@SerializedName("backorders")
@Expose
private String backorders;
@SerializedName("backorders_allowed")
@Expose
private Boolean backordersAllowed;
@SerializedName("backordered")
@Expose
private Boolean backordered;
@SerializedName("sold_individually")
@Expose
private Boolean soldIndividually;
@SerializedName("weight")
@Expose
private String weight;
@SerializedName("dimensions")
@Expose
private Dimensions dimensions;
@SerializedName("shipping_required")
@Expose
private Boolean shippingRequired;
@SerializedName("shipping_taxable")
@Expose
private Boolean shippingTaxable;
@SerializedName("shipping_class")
@Expose
private String shippingClass;
@SerializedName("shipping_class_id")
@Expose
private Integer shippingClassId;
@SerializedName("reviews_allowed")
@Expose
private Boolean reviewsAllowed;
@SerializedName("average_rating")
@Expose
private String averageRating;
@SerializedName("rating_count")
@Expose
private Integer ratingCount;
@SerializedName("related_ids")
@Expose
private List<Integer> relatedIds = null;
@SerializedName("upsell_ids")
@Expose
private List<Object> upsellIds = null;
@SerializedName("cross_sell_ids")
@Expose
private List<Object> crossSellIds = null;
@SerializedName("parent_id")
@Expose
private Integer parentId;
@SerializedName("purchase_note")
@Expose
private String purchaseNote;
@SerializedName("categories")
@Expose
private List<Category> categories = null;
@SerializedName("tags")
@Expose
private List<Object> tags = null;
@SerializedName("images")
@Expose
private List<Image> images = null;
@SerializedName("attributes")
@Expose
private List<Attribute> attributes = null;
@SerializedName("default_attributes")
@Expose
private List<Object> defaultAttributes = null;
@SerializedName("variations")
@Expose
private List<Integer> variations = null;
@SerializedName("grouped_products")
@Expose
private List<Object> groupedProducts = null;
@SerializedName("menu_order")
@Expose
private Integer menuOrder;
@SerializedName("meta_data")
@Expose
private List<MetaDatum> metaData = null;
@SerializedName("_links")
@Expose
private Links links;
/**
* No args constructor for use in serialization
*
*/
public ProductsByCategory() {
}
}
答案 0 :(得分:2)
如果您使用http://www.jsonschema2pojo.org/制作POJO文件,请检查是否有类似以下的类。
public class Example {
@SerializedName("ProductsByCategory")
@Expose
public ProductsByCategory[] productsByCategory;
}
你需要在使用Gson解析JSON时使用该类。
Example items = gson.fromJson(mMessage, Example.class);