java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在使用Gson库时为STRING [英] java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING while using Gson library

查看:92
本文介绍了java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在使用Gson库时为STRING的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我知道,这个问题已经被问过多次了,我已经尝试了很多SO答案但没有任何帮助. /p>

我这里有JSON字符串

"[
{\"heading\":\"Bike Services\",
    \"content\":[
        {\"title\":\"General Service\",\"icon\":\"bike_service_img\"},
        {\"title\":\"Premium Bike Service\",\"icon\":\"bike_service_img\"},
        {\"title\":\"Repair Job\",\"icon\":\"bike_service_img\"},
        {\"title\":\"Bike Ceramic Coating\",\"icon\":\"bike_service_img\"}
    ]
}, 
{\"heading\":\"Bike Service Centre Near You\",
    \"content\":[
        {\"title\":\"Bike Shop Name one\",\"icon\":\"bike_service_centre_img\"},
        {\"title\":\"Bike Shop Name two\",\"icon\":\"bike_service_centre_img\"},
        {\"title\":\"Bike Shop Name three\",\"icon\":\"bike_service_centre_img\"},
        {\"title\":\"Bike Shop Name four\",\"icon\":\"bike_service_centre_img\"},
        {\"title\":\"Bike Shop Name five\",\"icon\":\"bike_service_centre_img\"},
        {\"title\":\"Bike Shop Name six\",\"icon\":\"bike_service_centre_img\"}
    ]
}, 
{\"heading\":\"Car Services\",
    \"content\":[
        {\"title\":\"Express Service\",\"icon\":\"car_service_img\"},
        {\"title\":\"Dent/Scratch Removal\",\"icon\":\"car_service_img\"},
        {\"title\":\"Interior Detailing\",\"icon\":\"car_service_img\"},
        {\"title\":\"Oil Change Package\",\"icon\":\"car_service_img\"},
        {\"title\":\"Complete Car Spa\",\"icon\":\"car_service_img\"},
        {\"title\":\"AC Service\",\"icon\":\"car_service_img\"}
    ]
}, 
{\"heading\":\"Car Service Centre Near You\",
    \"content\":[
        {\"title\":\"Car Shop Name one\",\"icon\":\"car_service_centre_img\"},
        {\"title\":\"Car Shop Name two\",\"icon\":\"car_service_centre_img\"},
        {\"title\":\"Car Shop Name three\",\"icon\":\"car_service_centre_img\"},
        {\"title\":\"Car Shop Name four\",\"icon\":\"car_service_centre_img\"},
        {\"title\":\"Car Shop Name five\",\"icon\":\"car_service_centre_img\"},
        {\"title\":\"Car Shop Name six\",\"icon\":\"car_service_centre_img\"}
    ]
}
]"

和POJO类ContainerItems

public class ContainerItems {
    String heading;
    List<ContainerContents> content;

    public String getHeading() {
        return heading;
    }

    public void setHeading(String heading) {
        this.heading = heading;
    }

    public List<ContainerContents> getContent() {
        return content;
    }

    public void setContent(ArrayList<ContainerContents> content) {
        this.content = content;
    }
}

ContainerContents.java

public class ContainerContents {
    private String title;
    private String icon;

    public String getTitle() {
        return title;
    }

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

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }
}

通过Gson库进行解析,如下所示

Gson gson = new Gson();
List<ContainerItems> containerItemList = gson.fromJson(mainContainerItems, new TypeToken<List<ContainerItems>>() {}.getType());

但是出现错误

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 2 path $
                      at com.google.gson.Gson.fromJson(Gson.java:939)
                      at com.google.gson.Gson.fromJson(Gson.java:892)
                      at com.google.gson.Gson.fromJson(Gson.java:841)
                      at com.sam.service.fragments.HomeFragment.loadContainerItems(HomeFragment.java:149)
                      at com.sam.service.fragments.HomeFragment.onCreateView(HomeFragment.java:133)
                      at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428)
                      at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
                      at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
                      at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
                      at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
                      at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
                      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
                      at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3248)
                      at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3200)
                      at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195)
                      at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597)
                      at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
                      at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
                      at android.app.Activity.performStart(Activity.java:7157)
                      at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2938)
                      at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
                      at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
                      at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
                      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
                      at android.os.Handler.dispatchMessage(Handler.java:106)
                      at android.os.Looper.loop(Looper.java:193)
                      at android.app.ActivityThread.main(ActivityThread.java:6680)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
                   Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 2 path $
                      at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350)
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80)
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)

我无法理解这里出了什么问题.请在这里帮助我.

解决方案

您是否验证json格式?我已经重新设置如下,然后它可以工作.

     [
      {
        "heading": "Bike Services",
        "content": [
          {
            "title": "General Service",
            "icon": "bike_service_img"
          },
          {
            "title": "Premium Bike Service",
            "icon": "bike_service_img"
          },
          {
            "title": "Repair Job",
            "icon": "bike_service_img"
          },
          {
            "title": "Bike Ceramic Coating",
            "icon": "bike_service_img"
          }
        ]
      },
      {
        "heading": "Bike Service Centre Near You",
        "content": [
          {
            "title": "Bike Shop Name one",
            "icon": "bike_service_centre_img"
          },
          {
            "title": "Bike Shop Name two",
            "icon": "bike_service_centre_img"
          },
          {
            "title": "Bike Shop Name three",
            "icon": "bike_service_centre_img"
          },
          {
            "title": "Bike Shop Name four",
            "icon": "bike_service_centre_img"
          },
          {
            "title": "Bike Shop Name five",
            "icon": "bike_service_centre_img"
          },
          {
            "title": "Bike Shop Name six",
            "icon": "bike_service_centre_img"
          }
        ]
      },
      {
        "heading": "Car Services",
        "content": [
          {
            "title": "Express Service",
            "icon": "car_service_img"
          },
          {
            "title": "Dent/Scratch Removal",
            "icon": "car_service_img"
          },
          {
            "title": "Interior Detailing",
            "icon": "car_service_img"
          },
          {
            "title": "Oil Change Package",
            "icon": "car_service_img"
          },
          {
            "title": "Complete Car Spa",
            "icon": "car_service_img"
          },
          {
            "title": "AC Service",
            "icon": "car_service_img"
          }
        ]
      },
      {
        "heading": "Car Service Centre Near You",
        "content": [
          {
            "title": "Car Shop Name one",
            "icon": "car_service_centre_img"
          },
          {
            "title": "Car Shop Name two",
            "icon": "car_service_centre_img"
          },
          {
            "title": "Car Shop Name three",
            "icon": "car_service_centre_img"
          },
          {
            "title": "Car Shop Name four",
            "icon": "car_service_centre_img"
          },
          {
            "title": "Car Shop Name five",
            "icon": "car_service_centre_img"
          },
          {
            "title": "Car Shop Name six",
            "icon": "car_service_centre_img"
          }
        ]
      }
    ]

I know, this question has been asked multiple times and I've tried many SO answers this , this , this but nothing helped me.

I'm having JSON string here

"[
{\"heading\":\"Bike Services\",
    \"content\":[
        {\"title\":\"General Service\",\"icon\":\"bike_service_img\"},
        {\"title\":\"Premium Bike Service\",\"icon\":\"bike_service_img\"},
        {\"title\":\"Repair Job\",\"icon\":\"bike_service_img\"},
        {\"title\":\"Bike Ceramic Coating\",\"icon\":\"bike_service_img\"}
    ]
}, 
{\"heading\":\"Bike Service Centre Near You\",
    \"content\":[
        {\"title\":\"Bike Shop Name one\",\"icon\":\"bike_service_centre_img\"},
        {\"title\":\"Bike Shop Name two\",\"icon\":\"bike_service_centre_img\"},
        {\"title\":\"Bike Shop Name three\",\"icon\":\"bike_service_centre_img\"},
        {\"title\":\"Bike Shop Name four\",\"icon\":\"bike_service_centre_img\"},
        {\"title\":\"Bike Shop Name five\",\"icon\":\"bike_service_centre_img\"},
        {\"title\":\"Bike Shop Name six\",\"icon\":\"bike_service_centre_img\"}
    ]
}, 
{\"heading\":\"Car Services\",
    \"content\":[
        {\"title\":\"Express Service\",\"icon\":\"car_service_img\"},
        {\"title\":\"Dent/Scratch Removal\",\"icon\":\"car_service_img\"},
        {\"title\":\"Interior Detailing\",\"icon\":\"car_service_img\"},
        {\"title\":\"Oil Change Package\",\"icon\":\"car_service_img\"},
        {\"title\":\"Complete Car Spa\",\"icon\":\"car_service_img\"},
        {\"title\":\"AC Service\",\"icon\":\"car_service_img\"}
    ]
}, 
{\"heading\":\"Car Service Centre Near You\",
    \"content\":[
        {\"title\":\"Car Shop Name one\",\"icon\":\"car_service_centre_img\"},
        {\"title\":\"Car Shop Name two\",\"icon\":\"car_service_centre_img\"},
        {\"title\":\"Car Shop Name three\",\"icon\":\"car_service_centre_img\"},
        {\"title\":\"Car Shop Name four\",\"icon\":\"car_service_centre_img\"},
        {\"title\":\"Car Shop Name five\",\"icon\":\"car_service_centre_img\"},
        {\"title\":\"Car Shop Name six\",\"icon\":\"car_service_centre_img\"}
    ]
}
]"

And the POJO classes ContainerItems

public class ContainerItems {
    String heading;
    List<ContainerContents> content;

    public String getHeading() {
        return heading;
    }

    public void setHeading(String heading) {
        this.heading = heading;
    }

    public List<ContainerContents> getContent() {
        return content;
    }

    public void setContent(ArrayList<ContainerContents> content) {
        this.content = content;
    }
}

and the ContainerContents.java

public class ContainerContents {
    private String title;
    private String icon;

    public String getTitle() {
        return title;
    }

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

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }
}

Parsing through Gson library as follows

Gson gson = new Gson();
List<ContainerItems> containerItemList = gson.fromJson(mainContainerItems, new TypeToken<List<ContainerItems>>() {}.getType());

But getting error as

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 2 path $
                      at com.google.gson.Gson.fromJson(Gson.java:939)
                      at com.google.gson.Gson.fromJson(Gson.java:892)
                      at com.google.gson.Gson.fromJson(Gson.java:841)
                      at com.sam.service.fragments.HomeFragment.loadContainerItems(HomeFragment.java:149)
                      at com.sam.service.fragments.HomeFragment.onCreateView(HomeFragment.java:133)
                      at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1428)
                      at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1759)
                      at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1827)
                      at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
                      at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2596)
                      at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2383)
                      at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2338)
                      at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2245)
                      at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3248)
                      at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3200)
                      at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:195)
                      at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:597)
                      at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
                      at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1391)
                      at android.app.Activity.performStart(Activity.java:7157)
                      at android.app.ActivityThread.handleStartActivity(ActivityThread.java:2938)
                      at android.app.servertransaction.TransactionExecutor.performLifecycleSequence(TransactionExecutor.java:180)
                      at android.app.servertransaction.TransactionExecutor.cycleToPath(TransactionExecutor.java:165)
                      at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:142)
                      at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:70)
                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1809)
                      at android.os.Handler.dispatchMessage(Handler.java:106)
                      at android.os.Looper.loop(Looper.java:193)
                      at android.app.ActivityThread.main(ActivityThread.java:6680)
                      at java.lang.reflect.Method.invoke(Native Method)
                      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
                   Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 2 path $
                      at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:350)
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:80)
                      at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:61)

I'm not able understand what's wrong here. Please help me here.

解决方案

Do you verify the json format? I have reformated as below then it works.

     [
      {
        "heading": "Bike Services",
        "content": [
          {
            "title": "General Service",
            "icon": "bike_service_img"
          },
          {
            "title": "Premium Bike Service",
            "icon": "bike_service_img"
          },
          {
            "title": "Repair Job",
            "icon": "bike_service_img"
          },
          {
            "title": "Bike Ceramic Coating",
            "icon": "bike_service_img"
          }
        ]
      },
      {
        "heading": "Bike Service Centre Near You",
        "content": [
          {
            "title": "Bike Shop Name one",
            "icon": "bike_service_centre_img"
          },
          {
            "title": "Bike Shop Name two",
            "icon": "bike_service_centre_img"
          },
          {
            "title": "Bike Shop Name three",
            "icon": "bike_service_centre_img"
          },
          {
            "title": "Bike Shop Name four",
            "icon": "bike_service_centre_img"
          },
          {
            "title": "Bike Shop Name five",
            "icon": "bike_service_centre_img"
          },
          {
            "title": "Bike Shop Name six",
            "icon": "bike_service_centre_img"
          }
        ]
      },
      {
        "heading": "Car Services",
        "content": [
          {
            "title": "Express Service",
            "icon": "car_service_img"
          },
          {
            "title": "Dent/Scratch Removal",
            "icon": "car_service_img"
          },
          {
            "title": "Interior Detailing",
            "icon": "car_service_img"
          },
          {
            "title": "Oil Change Package",
            "icon": "car_service_img"
          },
          {
            "title": "Complete Car Spa",
            "icon": "car_service_img"
          },
          {
            "title": "AC Service",
            "icon": "car_service_img"
          }
        ]
      },
      {
        "heading": "Car Service Centre Near You",
        "content": [
          {
            "title": "Car Shop Name one",
            "icon": "car_service_centre_img"
          },
          {
            "title": "Car Shop Name two",
            "icon": "car_service_centre_img"
          },
          {
            "title": "Car Shop Name three",
            "icon": "car_service_centre_img"
          },
          {
            "title": "Car Shop Name four",
            "icon": "car_service_centre_img"
          },
          {
            "title": "Car Shop Name five",
            "icon": "car_service_centre_img"
          },
          {
            "title": "Car Shop Name six",
            "icon": "car_service_centre_img"
          }
        ]
      }
    ]

这篇关于java.lang.IllegalStateException:预期为BEGIN_ARRAY,但在使用Gson库时为STRING的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆