改进JSON错误解析错误

时间:2016-04-15 05:31:46

标签: java android json parsing retrofit

当我尝试解析以下JSON响应

时,

Retrofit给了我这个错误

原始

[{"DeviceName":"Samsung Galaxy A5","Brand":"Samsung"...},{"DeviceName":"Samsung Galaxy A5 Duos"... ...]

漂亮 JSON Data

  

预计BEGIN_ARRAY,但在第1行第2栏路径为BEGIN_OBJECT $

@FormUrlEncoded
@PATCH("/v1/getphone/")
Call<List<Phone>> getPhoneInfo(@Field("device") String device);

Java Class

public class Phone {
@SerializedName("DeviceName")
@Expose
public String DeviceName;
@SerializedName("Brand")
@Expose
public String Brand;
@SerializedName("technology")
@Expose
public String technology;
....

有任何帮助吗? 感谢

2 个答案:

答案 0 :(得分:2)

将您的Phone类作为列表放在另一个类中:

public class Root {

private List<Phone> phone;

//getters and setters here
}

并更改此行:

Call<List<Phone>> getPhoneInfo(@Field("device") String device);

Call<Root> getPhoneInfo(@Field("device") String device);

答案 1 :(得分:1)

在改造中你需要一个数组名来创建一个类。你的json是有效的,但是响应没有任何数组名,所以它不能以这种方式解析。你必须通过在改造中获取响应中的json字符串来手动解析它

  ApiServiceClient.getApiService().yourFunctionName().enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Response<ResponseBody> response, Retrofit retrofit) {
                try {
                    String jsonString=response.body().string();
                    Log.e(TAG, "onResponse: "+response.body().string());
                     //Parse your json here
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onFailure(Throwable t) {

            }
        });