Gson解析出现类似错误;com.google.gson.JsonSyntaxException:java.lang.illegalStateException:Exception BEGIN_AR

来源:互联网 发布:广东人长相知乎 编辑:程序博客网 时间:2024/06/06 12:50
[java] view plain copy
  1. <span style="font-size:18px;">Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 45  
  2.     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)  
  3.     at com.google.gson.Gson.fromJson(Gson.java:803)  
  4.     at com.google.gson.Gson.fromJson(Gson.java:768)  
  5.     at com.google.gson.Gson.fromJson(Gson.java:717)  
  6.     at com.google.gson.Gson.fromJson(Gson.java:689)  
  7.     at GsonUtils.changeGsonToBean(GsonUtils.java:22)  
  8.     at Test.main(Test.java:25)  
  9. Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 45  
  10.     at com.google.gson.stream.JsonReader.beginArray(JsonReader.java:338)  
  11.     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:79)  
  12.     at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60)  
  13.     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)  
  14.     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)  
  15.     ... 6 more</span>  

类似这种错误的原因,Expected BEGIN_ARRAY but was STRING at line 1 column 45.

可以看到提示大概的意思就是,期望是BEGIN_ARRAY,但是是STRING。


下面是例子:

[java] view plain copy
  1. <span style="font-size:18px;">import java.io.Serializable;  
  2. import java.util.List;  
  3.   
  4.   
  5. public class Test {  
  6.     public static List<ArticleImage> articleimglist;  
  7.     public static void main(String[] args) {  
  8.         String str = "{\"age\":23,\"name\":\"dsfds\", <span style="background-color: rgb(255102102);">\"articleimglist\":\"\"</span>}";  
  9.         Article ar = GsonUtils.changeGsonToBean(str, Article.class);  
  10.         System.out.println(ar.age);  
  11.         System.out.println(ar.name);  
  12.           
  13.     }  
  14. }  
  15.   
  16. class Article {  
  17.     public int age;  
  18.     public String name;  
  19.     <span style="color:#ff6666;">public List<ArticleImage> articleimglist;</span>  
  20. }  
  21.   
  22. class ArticleImage implements Serializable{  
  23.     private static final long serialVersionUID = 6762300101092577096L;  
  24.     public String image;  
  25. }</span>  

可以看到本来是一个对象的数组,但是我这里确实"",空字符串。所以导致出现了问题。

其实这个问题是实际中遇到的,原因是服务器定义数据的时候不够严谨,将数组对象定义为空字符串了。

[java] view plain copy
  1. <span style="font-size:18px;">String str = "{\"age\":23,\"name\":\"dsfds\", <span style="background-color: rgb(255102102);">\"articleimglist\":null</span>}";</span>  
[java] view plain copy
  1. <span style="font-size:18px;">这样子就可以了。</span>  

总结:(1)碰到这个问题的时候,比较郁闷,使用HiJson等解析工具没有报错。但是实际代码中总是报错。(这个很坑,然自己一时没有想明白)

            (2)服务器端的数据类型应该定义严谨一些,要不然很容易出现错误。

            (3)Expected BEGIN_ARRAY but was STRING at line 1 column 45.以后碰到这种错误就大概知道是啥意思了。

                      找出这个问题的办法也是,分解法,实际项目中数据量很大,分解成小例子,就趁成上述的。

阅读全文
0 0
原创粉丝点击