【问题标题】:How to parse all json objects and send them inside a class?如何解析所有 json 对象并将它们发送到一个类中?
【发布时间】:2017-10-13 07:38:39
【问题描述】:

这是来自 Volley 的响应 JSON:

   {  
   "status":true,
   "data":{  
      "product_id":"12",
      "product_ogpm_id":"OGPR1000485",
      "product_part_number":"6ED1 057-1AA01-0BA0",
      "escape_part_number":"6ed10571aa010ba0",
      "product_name":"USB PC Cable",
      "product_uom":"",
      "product_image":"",
      "product_description":"",
      "product_manufacturer":"Siemens",
      "manufacturer_id":"4",
      "replace_id":"0",
      "replace_date":"0000-00-00 00:00:00",
      "product_added_date":"2017-09-12 00:57:15",
      "product_added_by":"Jayank Chopra",
      "product_modified_date":"0000-00-00 00:00:00",
      "product_modified_by":"",
      "product_status":"1",
      "manufacturer_name":"Siemens",
      "contracted_id":"1",
      "data_sheets":[  

      ]
   },
   "message":"Product found!"
}

对于解析我使用 Gson 像这样:

   /*  BarcodeSearchResponse responseObj = new Gson().fromJson(responseJson.toString(), BarcodeSearchResponse.class);
        where BarcodeSearchResponse class is this:
        public class BarcodeSearchResponse{
            public ArrayList<ScanData> data;
        }
   */                          

而 ScanData 是一个包含:

 public class ScanData implements Parcelable{

        @SerializedName("product_id")
        @Expose
        private String productId;
        @SerializedName("product_ogpm_id")
        @Expose
        private String productOgpmId;
        @SerializedName("product_part_number")
        @Expose
        private String productPartNumber;
        @SerializedName("escape_part_number")
        @Expose
        private String escapePartNumber;
        @SerializedName("product_name")
        @Expose
        private String productName;
        @SerializedName("product_uom")
        @Expose
        private String productUom;
        @SerializedName("product_image")
        @Expose
        private String productImage;
        @SerializedName("product_description")
        @Expose
        private String productDescription;
        @SerializedName("product_manufacturer")
        @Expose
        private String productManufacturer;
        @SerializedName("manufacturer_id")
        @Expose
        private String manufacturerId;
        @SerializedName("replace_id")
        @Expose
        private String replaceId;
        @SerializedName("replace_date")
        @Expose
        private String replaceDate;
        @SerializedName("product_added_date")
        @Expose
        private String productAddedDate;
        @SerializedName("product_added_by")
        @Expose
        private String productAddedBy;
        @SerializedName("product_modified_date")
        @Expose
        private String productModifiedDate;
        @SerializedName("product_modified_by")
        @Expose
        private String productModifiedBy;
        @SerializedName("product_status")
        @Expose
        private String productStatus;
        @SerializedName("manufacturer_name")
        @Expose
        private String manufacturerName;
        @SerializedName("contracted_id")
        @Expose
        private String contractedId;
        @SerializedName("data_sheets")
        @Expose
        private List<Object> dataSheets = null;

        protected ScanData(Parcel in) {
            productId = in.readString();
            productOgpmId = in.readString();
            productPartNumber = in.readString();
            escapePartNumber = in.readString();
            productName = in.readString();
            productUom = in.readString();
            productImage = in.readString();
            productDescription = in.readString();
            productManufacturer = in.readString();
            manufacturerId = in.readString();
            replaceId = in.readString();
            replaceDate = in.readString();
            productAddedDate = in.readString();
            productAddedBy = in.readString();
            productModifiedDate = in.readString();
            productModifiedBy = in.readString();
            productStatus = in.readString();
            manufacturerName = in.readString();
            contractedId = in.readString();
        }

        public static final Creator<ScanData> CREATOR = new Creator<ScanData>() {
            @Override
            public ScanData createFromParcel(Parcel in) {
                return new ScanData(in);
            }

            @Override
            public ScanData[] newArray(int size) {
                return new ScanData[size];
            }
        };

        public String getProductId() {
            return productId;
        }

        public void setProductId(String productId) {
            this.productId = productId;
        }

        public String getProductOgpmId() {
            return productOgpmId;
        }

        public void setProductOgpmId(String productOgpmId) {
            this.productOgpmId = productOgpmId;
        }

        public String getProductPartNumber() {
            return productPartNumber;
        }

        public void setProductPartNumber(String productPartNumber) {
            this.productPartNumber = productPartNumber;
        }

        public String getEscapePartNumber() {
            return escapePartNumber;
        }

        public void setEscapePartNumber(String escapePartNumber) {
            this.escapePartNumber = escapePartNumber;
        }

        public String getProductName() {
            return productName;
        }

        public void setProductName(String productName) {
            this.productName = productName;
        }

        public String getProductUom() {
            return productUom;
        }

        public void setProductUom(String productUom) {
            this.productUom = productUom;
        }

        public String getProductImage() {
            return productImage;
        }

        public void setProductImage(String productImage) {
            this.productImage = productImage;
        }

        public String getProductDescription() {
            return productDescription;
        }

        public void setProductDescription(String productDescription) {
            this.productDescription = productDescription;
        }

        public String getProductManufacturer() {
            return productManufacturer;
        }

        public void setProductManufacturer(String productManufacturer) {
            this.productManufacturer = productManufacturer;
        }

        public String getManufacturerId() {
            return manufacturerId;
        }

        public void setManufacturerId(String manufacturerId) {
            this.manufacturerId = manufacturerId;
        }

        public String getReplaceId() {
            return replaceId;
        }

        public void setReplaceId(String replaceId) {
            this.replaceId = replaceId;
        }

        public String getReplaceDate() {
            return replaceDate;
        }

        public void setReplaceDate(String replaceDate) {
            this.replaceDate = replaceDate;
        }

        public String getProductAddedDate() {
            return productAddedDate;
        }

        public void setProductAddedDate(String productAddedDate) {
            this.productAddedDate = productAddedDate;
        }

        public String getProductAddedBy() {
            return productAddedBy;
        }

        public void setProductAddedBy(String productAddedBy) {
            this.productAddedBy = productAddedBy;
        }

        public String getProductModifiedDate() {
            return productModifiedDate;
        }

        public void setProductModifiedDate(String productModifiedDate) {
            this.productModifiedDate = productModifiedDate;
        }

        public String getProductModifiedBy() {
            return productModifiedBy;
        }

        public void setProductModifiedBy(String productModifiedBy) {
            this.productModifiedBy = productModifiedBy;
        }

        public String getProductStatus() {
            return productStatus;
        }

        public void setProductStatus(String productStatus) {
            this.productStatus = productStatus;
        }

        public String getManufacturerName() {
            return manufacturerName;
        }

        public void setManufacturerName(String manufacturerName) {
            this.manufacturerName = manufacturerName;
        }

        public String getContractedId() {
            return contractedId;
        }

        public void setContractedId(String contractedId) {
            this.contractedId = contractedId;
        }

        public List<Object> getDataSheets() {
            return dataSheets;
        }

        public void setDataSheets(List<Object> dataSheets) {
            this.dataSheets = dataSheets;
        }


        @Override
        public int describeContents() {
            return 0;
        }

        @Override
        public void writeToParcel(Parcel parcel, int i) {
            parcel.writeString(productId);
            parcel.writeString(productOgpmId);
            parcel.writeString(productPartNumber);
            parcel.writeString(escapePartNumber);
            parcel.writeString(productName);
            parcel.writeString(productUom);
            parcel.writeString(productImage);
            parcel.writeString(productDescription);
            parcel.writeString(productManufacturer);
            parcel.writeString(manufacturerId);
            parcel.writeString(replaceId);
            parcel.writeString(replaceDate);
            parcel.writeString(productAddedDate);
            parcel.writeString(productAddedBy);
            parcel.writeString(productModifiedDate);
            parcel.writeString(productModifiedBy);
            parcel.writeString(productStatus);
            parcel.writeString(manufacturerName);
            parcel.writeString(contractedId);
        }
    }*/

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期为 BEGIN_ARRAY,但在第 1 行第 24 列路径为 BEGIN_OBJECT $.data
com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read

【问题讨论】:

标签: java android


【解决方案1】:

请重新检查您的数据。也许它看起来像波纹管

{
  "status": true,
  "data": [
    {
      "product_id": "12",
      "product_ogpm_id": "OGPR1000485",
      "product_part_number": "6ED1 057-1AA01-0BA0",
      "escape_part_number": "6ed10571aa010ba0",
      "product_name": "USB PC Cable",
      "product_uom": "",
      "product_image": "",
      "product_description": "",
      "product_manufacturer": "Siemens",
      "manufacturer_id": "4",
      "replace_id": "0",
      "replace_date": "0000-00-00 00:00:00",
      "product_added_date": "2017-09-12 00:57:15",
      "product_added_by": "Jayank Chopra",
      "product_modified_date": "0000-00-00 00:00:00",
      "product_modified_by": "",
      "product_status": "1",
      "manufacturer_name": "Siemens",
      "contracted_id": "1",
      "data_sheets": []
    },
    {
      "product_id": "13",
      "product_ogpm_id": "OGPR1000485",
      "product_part_number": "6ED1 057-1AA01-0BA0",
      "escape_part_number": "6ed10571aa010ba0",
      "product_name": "USB PC Cable",
      "product_uom": "",
      "product_image": "",
      "product_description": "",
      "product_manufacturer": "Siemens",
      "manufacturer_id": "4",
      "replace_id": "0",
      "replace_date": "0000-00-00 00:00:00",
      "product_added_date": "2017-09-12 00:57:15",
      "product_added_by": "Jayank Chopra",
      "product_modified_date": "0000-00-00 00:00:00",
      "product_modified_by": "",
      "product_status": "1",
      "manufacturer_name": "Siemens",
      "contracted_id": "1",
      "data_sheets": []
    }
  ],
  "message": "Product found!"
}

或者如果它与您发布的相同 请确保 BarcodeSearchResponse 看起来像这样:

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class BarcodeSearchResponse {

    @SerializedName("status")
    @Expose
    private boolean status;
    @SerializedName("data")
    @Expose
    private ScanData data;
    @SerializedName("message")
    @Expose
    private String message;

    public boolean isStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

    public ScanData getData() {
        return data;
    }

    public void setData(ScanData data) {
        this.data = data;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

【讨论】:

    【解决方案2】:

    您的 POJO 看起来不对。您的数据类应如下所示。

    public class Data {
    
    @SerializedName("product_id")
    @Expose
    private String productId;
    @SerializedName("product_ogpm_id")
    @Expose
    private String productOgpmId;
    @SerializedName("product_part_number")
    @Expose
    private String productPartNumber;
    @SerializedName("escape_part_number")
    @Expose
    private String escapePartNumber;
    @SerializedName("product_name")
    @Expose
    private String productName;
    @SerializedName("product_uom")
    @Expose
    private String productUom;
    @SerializedName("product_image")
    @Expose
    private String productImage;
    @SerializedName("product_description")
    @Expose
    private String productDescription;
    @SerializedName("product_manufacturer")
    @Expose
    private String productManufacturer;
    @SerializedName("manufacturer_id")
    @Expose
    private String manufacturerId;
    @SerializedName("replace_id")
    @Expose
    private String replaceId;
    @SerializedName("replace_date")
    @Expose
    private String replaceDate;
    @SerializedName("product_added_date")
    @Expose
    private String productAddedDate;
    @SerializedName("product_added_by")
    @Expose
    private String productAddedBy;
    @SerializedName("product_modified_date")
    @Expose
    private String productModifiedDate;
    @SerializedName("product_modified_by")
    @Expose
    private String productModifiedBy;
    @SerializedName("product_status")
    @Expose
    private String productStatus;
    @SerializedName("manufacturer_name")
    @Expose
    private String manufacturerName;
    @SerializedName("contracted_id")
    @Expose
    private String contractedId;
    @SerializedName("data_sheets")
    @Expose
    private List<Object> dataSheets = null;
    
    public String getProductId() {
    return productId;
    }
    
    public void setProductId(String productId) {
    this.productId = productId;
    }
    
    public String getProductOgpmId() {
    return productOgpmId;
    }
    
    public void setProductOgpmId(String productOgpmId) {
    this.productOgpmId = productOgpmId;
    }
    
    public String getProductPartNumber() {
    return productPartNumber;
    }
    
    public void setProductPartNumber(String productPartNumber) {
    this.productPartNumber = productPartNumber;
    }
    
    public String getEscapePartNumber() {
    return escapePartNumber;
    }
    
    public void setEscapePartNumber(String escapePartNumber) {
    this.escapePartNumber = escapePartNumber;
    }
    
    public String getProductName() {
    return productName;
    }
    
    public void setProductName(String productName) {
    this.productName = productName;
    }
    
    public String getProductUom() {
    return productUom;
    }
    
    public void setProductUom(String productUom) {
    this.productUom = productUom;
    }
    
    public String getProductImage() {
    return productImage;
    }
    
    public void setProductImage(String productImage) {
    this.productImage = productImage;
    }
    
    public String getProductDescription() {
    return productDescription;
    }
    
    public void setProductDescription(String productDescription) {
    this.productDescription = productDescription;
    }
    
    public String getProductManufacturer() {
    return productManufacturer;
    }
    
    public void setProductManufacturer(String productManufacturer) {
    this.productManufacturer = productManufacturer;
    }
    
    public String getManufacturerId() {
    return manufacturerId;
    }
    
    public void setManufacturerId(String manufacturerId) {
    this.manufacturerId = manufacturerId;
    }
    
    public String getReplaceId() {
    return replaceId;
    }
    
    public void setReplaceId(String replaceId) {
    this.replaceId = replaceId;
    }
    
    public String getReplaceDate() {
    return replaceDate;
    }
    
    public void setReplaceDate(String replaceDate) {
    this.replaceDate = replaceDate;
    }
    
    public String getProductAddedDate() {
    return productAddedDate;
    }
    
    public void setProductAddedDate(String productAddedDate) {
    this.productAddedDate = productAddedDate;
    }
    
    public String getProductAddedBy() {
    return productAddedBy;
    }
    
    public void setProductAddedBy(String productAddedBy) {
    this.productAddedBy = productAddedBy;
    }
    
    public String getProductModifiedDate() {
    return productModifiedDate;
    }
    
    public void setProductModifiedDate(String productModifiedDate) {
    this.productModifiedDate = productModifiedDate;
    }
    
    public String getProductModifiedBy() {
    return productModifiedBy;
    }
    
    public void setProductModifiedBy(String productModifiedBy) {
    this.productModifiedBy = productModifiedBy;
    }
    
    public String getProductStatus() {
    return productStatus;
    }
    
    public void setProductStatus(String productStatus) {
    this.productStatus = productStatus;
    }
    
    public String getManufacturerName() {
    return manufacturerName;
    }
    
    public void setManufacturerName(String manufacturerName) {
    this.manufacturerName = manufacturerName;
    }
    
    public String getContractedId() {
    return contractedId;
    }
    
    public void setContractedId(String contractedId) {
    this.contractedId = contractedId;
    }
    
    public List<Object> getDataSheets() {
    return dataSheets;
    }
    
    public void setDataSheets(List<Object> dataSheets) {
    this.dataSheets = dataSheets;
    }
    
    }
    

    您的 ScanData 类应使用此数据类,如下所示。

    public class ScanData {
    
    @SerializedName("status")
    @Expose
    private Boolean status;
    @SerializedName("data")
    @Expose
    private Data data;
    @SerializedName("message")
    @Expose
    private String message;
    
    public Boolean getStatus() {
    return status;
    }
    
    public void setStatus(Boolean status) {
    this.status = status;
    }
    
    public Data getData() {
    return data;
    }
    
    public void setData(Data data) {
    this.data = data;
    }
    
    public String getMessage() {
    return message;
    }
    
    public void setMessage(String message) {
    this.message = message;
    }
    
    }
    

    附: 我没有把它打包,我想你可以自己做。

    【讨论】:

      猜你喜欢
      • 2016-11-27
      • 1970-01-01
      • 2012-03-22
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-15
      • 2019-12-02
      相关资源
      最近更新 更多