简体   繁体   English

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为 BEGIN_ARRAY,但在第 1 行第 1 列处为 STRING

[英]com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 1

GsonBuilder builder = new GsonBuilder();
Gson mGson = builder.create();
spinnerData = Arrays.asList(mGson.fromJson(response, Item.class));

After executing this code, size of spinnerdata list is showing 0. my response is:执行此代码后, spinnerdata 列表的大小显示为 0。我的回应是:

{"result":[{"item_code":"r2010","item_name":"rice"},{"item_code":"w2010","item_name":"wheat"},{"item_code":"p2010","item_name":"paddy"},{"item_code":"b2010","item_name":"bran"}]} {"result":[{"item_code":"r2010","item_name":"rice"},{"item_code":"w2010","item_name":"小麦"},{"item_code":"p2010" ,"item_name":"paddy"},{"item_code":"b2010","item_name":"麸"}]}

my code for item.java is:我的 item.java 代码是:

package com.example.booking;

import com.google.gson.annotations.SerializedName;
public class Item {
     @SerializedName("item_code")
     private String item_code;
     @SerializedName("item_name")
     private String item_name;

    public Item() {
    }

    public Item(String item_code, String item_name) {
        this.item_code = item_code;
        this.item_name = item_name;
    }

    public void setCode(String item_code) {
        this.item_code = item_code;
    }

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

    public String getCode() {
        return this.item_code;
    }

    public String getName() {
        return this.item_name;
    }
}

the error shows:错误显示:

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.booking, PID: 12452 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176) at com.google.gson.Gson.fromJson(Gson.java:803) at com.google.gson.Gson.fromJson(Gson.java:768) at com.google.gson.Gson.fromJson(Gson.java:717) at com.google.gson.Gson.fromJson(Gson.java:689) at com.example.booking.MainActivity$2.onResponse(MainActivity.java:82) at com.example.booking.MainActivity$2.onResponse(MainActivity.java:77) at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatch E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.booking, PID: 12452 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期为 BEGIN_OBJECT 但在 com.google.gson 的第 1 行第 1 列处为 STRING。 internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176) at com.google.gson.Gson.fromJson(Gson.java:803) at com.google.gson.Gson.fromJson(Gson.java:768)在 com.google.gson.Gson.fromJson(Gson.java:717) 在 com.google.gson.Gson.fromJson(Gson.java:689) 在 com.example.booking.MainActivity$2.onResponse(MainActivity.java: 82) 在 com.example.booking.MainActivity$2.onResponse(MainActivity.java:77) 在 com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) 在 com.android.volley.toolbox.StringRequest。 DeliverResponse(StringRequest.java:30) at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatch Message(Handler.java:95) at android.os.Looper.loop(Looper.java:179) at android.app.ActivityThread.main(ActivityThread.java:5730) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:681) Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374) at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:165) at com.google.gson.Gson.fromJson(Gson.java:803) at com.google.gson.Gson.fromJson(Gson.java:768) at com.google.gson.Gson.fromJson(Gson.java:717) at com.google.gson.Gson.fromJson(Gson.java:689) at com.example.booking.MainActivity$2.onResponse(MainActivity.java:82) at com.example.booking.MainActivity$2.onResponse(MainActivity.java:77) at com.android.volley.toolbox.StringRequest.delive Message(Handler.java:95) at android.os.Looper.loop(Looper.java:179) at android.app.ActivityThread.main(ActivityThread.java:5730) at java.lang.reflect.Method.invoke(Native)方法)在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:681) 引起:java.lang.IllegalStateException :预期BEGIN_OBJECT,但在com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374) com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java)的第1行第1列是STRING :165) 在 com.google.gson.Gson.fromJson(Gson.java:803) 在 com.google.gson.Gson.fromJson(Gson.java:768) 在 com.google.gson.Gson.fromJson(Gson. java:717) 在 com.google.gson.Gson.fromJson(Gson.java:689) 在 com.example.booking.MainActivity$2.onResponse(MainActivity.java:82) 在 com.example.booking.MainActivity$2.onResponse (MainActivity.java:77) 在 com.android.volley.toolbox.StringRequest.delive rResponse(StringRequest.java:60) at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:179) at android.app.ActivityThread.main(ActivityThread.java:5730) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:681) rResponse(StringRequest.java:60) at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) at android.os .Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:179) 在 android.app.ActivityThread.main( ActivityThread.java:5730) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) at com.android.internal.os。 ZygoteInit.main(ZygoteInit.java:681)

after appyling the changes应用更改后

Please check your response carefully.请仔细检查您的回复。 Here, result is an object, not an array.在这里, result是一个对象,而不是一个数组。 There is an array inside the result object. result对象中有一个数组。 So you need to parse the JSON into an object.所以你需要将 JSON 解析成一个对象。 Then you can get an array from the result .然后你可以从result得到一个数组。 I have given a sample entity from your given response and the output-我从您给定的响应和输出中给出了一个示例实体-

You can use your given code but with a little change -您可以使用给定的代码,但稍作更改 -

String response = "{\"result\":[{\"item_code\":\"r2010\",\"item_name\":\"rice\"}," +
                "{\"item_code\":\"w2010\",\"item_name\":\"wheat\"},{\"item_code\":\"p2010\"," +
                "\"item_name\":\"paddy\"},{\"item_code\":\"b2010\",\"item_name\":\"bran\"}]}";

        GsonBuilder builder = new GsonBuilder();
        Gson mGson = builder.create();
        Item spinnerData = mGson.fromJson(response, Item.class);

        List<Result> list = spinnerData.getResult();

Here, list will be your actual result.在这里, list将是您的实际结果。

Your Entity Is not correct for your response.您的实体对您的回复不正确。 The code below is the actual entity of your given response JSON -下面的代码是给定响应 JSON 的实际实体 -

public class Item {
    @SerializedName("result")
    private List<Result> result;

    public List<Result> getResult() { return result; }

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

class Result {
    @SerializedName("item_code")
    private String itemCode;

    @SerializedName("item_name")
    private String itemName;

    public void setItemCode(String itemCode){ this.itemCode = itemCode; }

    public String getItemCode(){ return itemCode; }

    public void setItemName(String itemName){ this.itemName = itemName; }

    public String getItemName(){ return itemName; }
}

Another solution to get hide of objects that the only attribute is a list without rewriting model classes (if not necessary)隐藏唯一属性是列表的对象的另一种解决方案,无需重写模型类(如果没有必要)

import com.google.gson.reflect.TypeToken;


spinnerData = mGson.fromJson(new JSONObject(response).getJSONArray("result").toString(), new TypeToken<Item>(){}.getType());

暂无
暂无

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

相关问题 com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在第2行第1列路径处为STRING - com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 2 column 1 path com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_OBJECT但在第1行第2列是BEGIN_ARRAY - com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期 $[BEGIN_OBJECT1 列但在 BEG3 行 - com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 3 path $[0] retrocom com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但在第1行第2列路径为BEGIN_ARRAY $ - retrofit com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_ARRAY但是STRING - com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在第1行第101列的路径为BEGIN_OBJECT - com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 101 path com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_OBJECT,但在第1行第2列路径处为BEGIN_ARRAY - com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在第1行第3列路径$ [0]中为BEGIN_OBJECT - com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 3 path $[0] kotlin com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ - kotlin com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $ com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期 BEGIN_OBJECTRAY BEGIN_OBJECTRAY - com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM