com.google.gson.JsonSyntaxException的解决方法

一、Gson的使用:

1.实体类

[java]  view plain  copy
 print ?
  1. package com.zsl.test;  
  2.   
  3. /**  
  4.  * 实体类   
  5.  * @author zsl 
  6.  * @version 2015年1月3日 19:10:10 
  7.  * 
  8.  */  
  9. public class Person {    
  10.         
  11.     private int id;    
  12.     private String name;    
  13.     private String address;    
  14.     private String email;    
  15.     private double money;    
  16.         
  17.     @Override    
  18.     public String toString() {    
  19.         // TODO Auto-generated method stub    
  20.         return  "编号:"+id+"  名字:"+name+"   地址:"+address+"   E-mail:"+email+"  钱:"+money;    
  21.     }    
  22.     public Person() {    
  23.         // TODO Auto-generated constructor stub    
  24.     }    
  25.     public Person(int id, String name, String address, String email,    
  26.             double money) {    
  27.         super();    
  28.         this.id = id;    
  29.         this.name = name;    
  30.         this.address = address;    
  31.         this.email = email;    
  32.         this.money = money;    
  33.     }    
  34.     public int getId() {    
  35.         return id;    
  36.     }    
  37.     public void setId(int id) {    
  38.         this.id = id;    
  39.     }    
  40.     public String getName() {    
  41.         return name;    
  42.     }    
  43.     public void setName(String name) {    
  44.         this.name = name;    
  45.     }    
  46.     public String getAddress() {    
  47.         return address;    
  48.     }    
  49.     public void setAddress(String address) {    
  50.         this.address = address;    
  51.     }    
  52.     public String getEmail() {    
  53.         return email;    
  54.     }    
  55.     public void setEmail(String email) {    
  56.         this.email = email;    
  57.     }    
  58.     public double getMoney() {    
  59.         return money;    
  60.     }    
  61.     public void setMoney(double money) {    
  62.         this.money = money;    
  63.     }    
  64.         
  65.     
  66. }    

2.json转换为实体对象

[java]  view plain  copy
 print ?
  1. /**  
  2.         * 转换一个Java Bean的时候  
  3.         * 记住不能使用[],只有在使用集合的时候才可以使用   
  4.         * 如上图贴的那个异常就是由此原因造成的,另外  
  5.         * 格式要规范,中间不能出现空格字符  
  6.         *   
  7.         **/  
  8. Gson g=new Gson();  
  9. String jsonBean="color:#ff0000;">{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0}";    
  10.        Person p=g.fromJson(jsonBean, Person.class);  
  11.        System.out.println(p);   

结果:

[html]  view plain  copy
 print ?
  1. 编号:0  名字:散仙0   地址:北京市0   E-mail:54152541@qq.com  钱:500.0  


3.json转换为List<Person

[java]  view plain  copy
 print ?
  1. "code" class="java">"white-space:pre">    Gson g=new Gson();  
String jsonBean1=" [{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0},{\"id\":1,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0}] "; List lists=g.fromJson(jsonBean1,new TypeToken>(){}.getType()); for(Person pp:lists){ System.out.println(pp); }

 
  
j结果:

[html]  view plain  copy
 print ?
  1. 编号:0  名字:散仙0   地址:北京市0   E-mail:54152541@qq.com  钱:500.0  
  2. 编号:1  名字:散仙0   地址:北京市0   E-mail:54152541@qq.com  钱:500.0  

二、com.google.gson.JsonSyntaxException的解决方法

1.如果我现在将【一、2】中的

[java]  view plain  copy
 print ?
  1. String jsonBean="{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0}";  
改为:(加上[ ])

[html]  view plain  copy
 print ?
  1. String jsonBean="<span style="color:#ff0000;">[span>{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0}<span style="color:#ff0000;">]span>";  

结果:

[java]  view plain  copy
 print ?
  1. Exception in thread "main" com.google.gson.JsonSyntaxException: "color:#ff0000;">java.lang.IllegalStateException"background-color: rgb(255, 255, 255);">"color:#ff0000;">Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $  
  2.     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:187)  
  3.     at com.google.gson.Gson.fromJson(Gson.java:805)  
  4.     at com.google.gson.Gson.fromJson(Gson.java:770)  
  5.     at com.google.gson.Gson.fromJson(Gson.java:719)  
  6.     at com.google.gson.Gson.fromJson(Gson.java:691)  
  7.     at com.zsl.test.Test.main(Test.java:25)  
  8. Caused by: "color:#ff0000;">java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $  
  9.     at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:387)  
  10.     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)  

2.如果我现在将【一、3】中的

[java]  view plain  copy
 print ?
  1. String jsonBean1="[{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0},{\"id\":1,\"name\":\"散仙0\     ",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0}]";    
改为:(去掉[ ])

[java]  view plain  copy
 print ?
  1. String jsonBean1="{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0},{\"id\":1,\"name\":\"散仙0\      ",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0}";    

结果:

[java]  view plain  copy
 print ?
  1. Exception in thread "main" com.google.gson.JsonSyntaxException: "color:#ff0000;">java.lang.IllegalStateException"background-color: rgb(255, 255, 255);">"color:#ff0000;">Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $  
  2.     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:187)  
  3.     at com.google.gson.Gson.fromJson(Gson.java:805)  
  4.     at com.google.gson.Gson.fromJson(Gson.java:770)  
  5.     at com.google.gson.Gson.fromJson(Gson.java:719)  
  6.     at com.google.gson.Gson.fromJson(Gson.java:691)  
  7.     at com.zsl.test.Test.main(Test.java:25)  
  8. Caused by: "color:#ff0000;">java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $  
  9.     at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:387)  
  10.     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)  

三、看到以上两个结果都会报错,那么怎么解决呢?

1.判断返回的数据对应实体对象的个数

如果是一个就截取字符串用【json转实体对象】的方法实现:

[java]  view plain  copy
 print ?
  1. "white-space:pre">    Person p=g.fromJson(jsonBean, Person.class);  
如果是一个以上就直接用【json转List<实体对象>】的方法实现:

[java]  view plain  copy
 print ?
  1. "white-space:pre">    List lists=g.fromJson(jsonBean1,new   TypeToken>(){}.getType());  
四、附上Gson的下载连接地址:链接:  http://pan.baidu.com/s/1pJI8b3P  密码: l3w3

/**
 * @author zsl
 * @link  http://blog.csdn.net/yy1300326388
 * @param 转载请注明
 * @version 2015年1月3日 19:48:59
 */

你可能感兴趣的:(移动开发android)