2017-10-15 124 views
0

我得到一个json结果从服务与改造像波纹管:改装 - 预计BEGIN_ARRAY,但是BEGIN_OBJECT?

{ 
    "result": { 
     "totalCount": 15, 
     "resultCount": 2, 
     "offset": 0, 
     "limit": 2, 
     "products": [ 
      { 
       "id": 10081, 
       "name": "prod", 
       "pictureUrl": "url", 
       "price": 1, 
       "url": "url", 
       "briefDescription": "test", 
       "description": "test", 
       "pictures": [], 
       "categoryTitle": "s s", 
       "categoryId": 53, 
       "extraInfo": { 
        "productProperties": [ 
         { 
          "id": 88, 
          "value": "6", 
          "measurementUnit": "s", 
          "title": "s" 
         }, 
         { 
          "id": 89, 
          "value": "2", 
          "measurementUnit": "s", 
          "title": "s s" 
         }, 
         { 
          "id": 90, 
          "value": "2", 
          "measurementUnit": "s", 
          "title": "s s s s" 
         }, 
         { 
          "id": 91, 
          "value": "", 
          "measurementUnit": "", 
          "title": "s s" 
         }, 
         { 
          "id": 92, 
          "value": "", 
          "measurementUnit": "", 
          "title": "s s" 
         }, 
         { 
          "id": 93, 
          "value": "", 
          "measurementUnit": "", 
          "title": "s" 
         }, 
         { 
          "id": 94, 
          "value": "", 
          "measurementUnit": "", 
          "title": "s" 
         } 
        ], 
        "published": false, 
        "preparationTime": 1, 
        "keywords": "", 
        "quantity": 0, 
        "status": 1 
       } 
      }, 
      { 
       "id": 51, 
       "name": "nam3", 
       "pictureUrl": "url", 
       "price": 495000, 
       "url": "url", 
       "briefDescription": "sdsds", 
       "description": "-", 
       "pictures": [], 
       "categoryTitle": "x x x", 
       "categoryId": 179, 
       "extraInfo": { 
        "productProperties": [ 
         { 
          "id": 67, 
          "value": "1000", 
          "measurementUnit": "x", 
          "title": "x x" 
         }, 
         { 
          "id": 68, 
          "value": "1050", 
          "measurementUnit": "s", 
          "title": "x x x" 
         }, 
         { 
          "id": 69, 
          "value": "", 
          "measurementUnit": "", 
          "title": "x x" 
         }, 
         { 
          "id": 70, 
          "value": "", 
          "measurementUnit": "", 
          "title": "x x" 
         }, 
         { 
          "id": 71, 
          "value": "", 
          "measurementUnit": "", 
          "title": "xxxx" 
         } 
        ], 
        "published": true, 
        "preparationTime": 2, 
        "keywords": "Aswddfe", 
        "quantity": 93, 
        "status": 1 
       } 
      } 
     ] 
    } 
} 

而且我越来越像波纹管与retrofit

RetrofitApi.getVendorAdminApi() 
     .getAdminProductss(userToken, limit, pageNumber, filters) 
     .enqueue(new Callback<List<ProductsModel>>() { 
      @Override 
      public void onResponse(Call<List<ProductsModel>> call, Response<List<ProductsModel>> response) { 
       if (response.isSuccessful()) { 
        resultListener.onSuccess(response.body()); 
       } else { 
        resultListener.onFailure(); 
       } 
      } 

      @Override 
      public void onFailure(Call<List<ProductsModel>> call, Throwable t) { 
       resultListener.onFailure(); 
       t.printStackTrace(); 
      } 
     }); 

但说我:

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $ 

而且波纹管是我的型号:

public class ProductsModel { 

    @SerializedName("result") 
    @Expose 
    private ResultProducts result; 

    public ResultProducts getResult() { 
     return result; 
    } 

    public void setResult(ResultProducts result) { 
     this.result = result; 
    } 

} 
+0

您还可以添加您的ResultProducts模型类 –

+0

在此URL(http://www.jsonschema2pojo.org/)中复制上述模型并查看模型。 –

回答

1

你的问题是Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 2 path $

所以更改List<ProductsModel>ProductsModel

  • 如果JSONJSONArray,您可以将其解析到List(如List<ProductsModel>)。

  • 如果JSONJSONObject,则可以将其解析为Object(如ProductsModel)。

更改为此。

@Override 
public void onResponse(Call<ProductsModel> call, Response<ProductsModel> response) { 
    if (response.isSuccessful()) { 
     resultListener.onSuccess(response.body()); 
    } else { 
     resultListener.onFailure(); 
    } 
} 

而且

Call<ProductsModel> getAdminProductss(); 
0

你改造的呼叫更改为:

RetrofitApi.getVendorAdminApi() 
     .getAdminProductss(userToken, limit, pageNumber, filters) 
     .enqueue(new Callback<ProductsModel>() { 
      @Override 
      public void onResponse(Call<ProductsModel> call, Response<ProductsModel> response) { 
       if (response.isSuccessful()) { 
        resultListener.onSuccess(response.body()); 
       } else { 
        resultListener.onFailure(); 
       } 
      } 

      @Override 
      public void onFailure(Call<ProductsModel> call, Throwable t) { 
       resultListener.onFailure(); 
       t.printStackTrace(); 
      } 
     }); 

原因是:如果你把List<ProductsModel>它将检查JsonArray但你的反应中它是未来JsonObject,因此只是从List<ProductsModel>改为ProductsModel会这样解决你的问题。

希望它有帮助!

0

json数据中的“result”节点是一个不是数组的对象。该模型类JSON的将是如下

public class ResponseJSON 
{ 
    private Result result; 

    public Result getResult() 
    { 
     return result; 
    } 

    public void setResult (Result result) 
    { 
     this.result = result; 
    } 

    @Override 
    public String toString() 
    { 
     return "ClassPojo [result = "+result+"]"; 
    } 
} 

public class Result 
{ 
    private String limit; 

    private String totalCount; 

    private String resultCount; 

    private String offset; 

    private Products[] products; 

    public String getLimit() 
    { 
     return limit; 
    } 

    public void setLimit (String limit) 
    { 
     this.limit = limit; 
    } 

    public String getTotalCount() 
    { 
     return totalCount; 
    } 

    public void setTotalCount (String totalCount) 
    { 
     this.totalCount = totalCount; 
    } 

    public String getResultCount() 
    { 
     return resultCount; 
    } 

    public void setResultCount (String resultCount) 
    { 
     this.resultCount = resultCount; 
    } 

    public String getOffset() 
    { 
     return offset; 
    } 

    public void setOffset (String offset) 
    { 
     this.offset = offset; 
    } 

    public Products[] getProducts() 
    { 
     return products; 
    } 

    public void setProducts (Products[] products) 
    { 
     this.products = products; 
    } 

    @Override 
    public String toString() 
    { 
     return "ClassPojo [limit = "+limit+", totalCount = "+totalCount+", resultCount = "+resultCount+", offset = "+offset+", products = "+products+"]"; 
    } 
} 

public class ProductProperties 
{ 
    private String id; 

    private String title; 

    private String measurementUnit; 

    private String value; 

    public String getId() 
    { 
     return id; 
    } 

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

    public String getTitle() 
    { 
     return title; 
    } 

    public void setTitle (String title) 
    { 
     this.title = title; 
    } 

    public String getMeasurementUnit() 
    { 
     return measurementUnit; 
    } 

    public void setMeasurementUnit (String measurementUnit) 
    { 
     this.measurementUnit = measurementUnit; 
    } 

    public String getValue() 
    { 
     return value; 
    } 

    public void setValue (String value) 
    { 
     this.value = value; 
    } 

    @Override 
    public String toString() 
    { 
     return "ClassPojo [id = "+id+", title = "+title+", measurementUnit = "+measurementUnit+", value = "+value+"]"; 
    } 
} 

public class Products 
{ 
    private String id; 

    private String price; 

    private String categoryTitle; 

    private String briefDescription; 

    private String pictureUrl; 

    private String description; 

    private String categoryId; 

    private String name; 

    private ExtraInfo extraInfo; 

    private String[] pictures; 

    private String url; 

    public String getId() 
    { 
     return id; 
    } 

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

    public String getPrice() 
    { 
     return price; 
    } 

    public void setPrice (String price) 
    { 
     this.price = price; 
    } 

    public String getCategoryTitle() 
    { 
     return categoryTitle; 
    } 

    public void setCategoryTitle (String categoryTitle) 
    { 
     this.categoryTitle = categoryTitle; 
    } 

    public String getBriefDescription() 
    { 
     return briefDescription; 
    } 

    public void setBriefDescription (String briefDescription) 
    { 
     this.briefDescription = briefDescription; 
    } 

    public String getPictureUrl() 
    { 
     return pictureUrl; 
    } 

    public void setPictureUrl (String pictureUrl) 
    { 
     this.pictureUrl = pictureUrl; 
    } 

    public String getDescription() 
    { 
     return description; 
    } 

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

    public String getCategoryId() 
    { 
     return categoryId; 
    } 

    public void setCategoryId (String categoryId) 
    { 
     this.categoryId = categoryId; 
    } 

    public String getName() 
    { 
     return name; 
    } 

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

    public ExtraInfo getExtraInfo() 
    { 
     return extraInfo; 
    } 

    public void setExtraInfo (ExtraInfo extraInfo) 
    { 
     this.extraInfo = extraInfo; 
    } 

    public String[] getPictures() 
    { 
     return pictures; 
    } 

    public void setPictures (String[] pictures) 
    { 
     this.pictures = pictures; 
    } 

    public String getUrl() 
    { 
     return url; 
    } 

    public void setUrl (String url) 
    { 
     this.url = url; 
    } 

    @Override 
    public String toString() 
    { 
     return "ClassPojo [id = "+id+", price = "+price+", categoryTitle = "+categoryTitle+", briefDescription = "+briefDescription+", pictureUrl = "+pictureUrl+", description = "+description+", categoryId = "+categoryId+", name = "+name+", extraInfo = "+extraInfo+", pictures = "+pictures+", url = "+url+"]"; 
    } 
} 

public class ExtraInfo 
{ 
    private String keywords; 

    private ProductProperties[] productProperties; 

    private String preparationTime; 

    private String status; 

    private String quantity; 

    private String published; 

    public String getKeywords() 
    { 
     return keywords; 
    } 

    public void setKeywords (String keywords) 
    { 
     this.keywords = keywords; 
    } 

    public ProductProperties[] getProductProperties() 
    { 
     return productProperties; 
    } 

    public void setProductProperties (ProductProperties[] productProperties) 
    { 
     this.productProperties = productProperties; 
    } 

    public String getPreparationTime() 
    { 
     return preparationTime; 
    } 

    public void setPreparationTime (String preparationTime) 
    { 
     this.preparationTime = preparationTime; 
    } 

    public String getStatus() 
    { 
     return status; 
    } 

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

    public String getQuantity() 
    { 
     return quantity; 
    } 

    public void setQuantity (String quantity) 
    { 
     this.quantity = quantity; 
    } 

    public String getPublished() 
    { 
     return published; 
    } 

    public void setPublished (String published) 
    { 
     this.published = published; 
    } 

    @Override 
    public String toString() 
    { 
     return "ClassPojo [keywords = "+keywords+", productProperties = "+productProperties+", preparationTime = "+preparationTime+", status = "+status+", quantity = "+quantity+", published = "+published+"]"; 
    } 
} 

public class ProductProperties 
{ 
    private String id; 

    private String title; 

    private String measurementUnit; 

    private String value; 

    public String getId() 
    { 
     return id; 
    } 

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

    public String getTitle() 
    { 
     return title; 
    } 

    public void setTitle (String title) 
    { 
     this.title = title; 
    } 

    public String getMeasurementUnit() 
    { 
     return measurementUnit; 
    } 

    public void setMeasurementUnit (String measurementUnit) 
    { 
     this.measurementUnit = measurementUnit; 
    } 

    public String getValue() 
    { 
     return value; 
    } 

    public void setValue (String value) 
    { 
     this.value = value; 
    } 

    @Override 
    public String toString() 
    { 
     return "ClassPojo [id = "+id+", title = "+title+", measurementUnit = "+measurementUnit+", value = "+value+"]"; 
    } 
} 

而且回调将是Callback<ResponseJSON>

你可以通过reponse.body()的产品结果的getResult()的getProducts()。

我从http://pojo.sodhanalibrary.com/生成了模型。你可以通过引用我给出的模型创建另一个。

0

作为您服务的回应,您有一个关键字为“结果”的对象,包含一些字段和产品列表(数组,带有关键“产品”)。你的ProductsModel是相当不错的。但你实施改造是错误的,应该是:

RetrofitApi.getVendorAdminApi() 
     .getAdminProductss(userToken, limit, pageNumber, filters) 
     .enqueue(new Callback<ProductsModel>() { 
      @Override 
      public void onResponse(Call<ProductsModel> call, Response<ProductsModel> response) { 
       if (response.isSuccessful()) { 
        resultListener.onSuccess(response.body()); 
       } else { 
        resultListener.onFailure(); 
       } 
      } 

      @Override 
      public void onFailure(Call<ProductsModel> call, Throwable t) { 
       resultListener.onFailure(); 
       t.printStackTrace(); 
      } 
     }); 

的变化:所有List<ProductsModel>通过ProductsModel更换。

相关问题