Gson的使用以及com.google.gson.JsonSyntaxException的解决方法

Posted ZeroFlutter

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Gson的使用以及com.google.gson.JsonSyntaxException的解决方法相关的知识,希望对你有一定的参考价值。

一、Gson的使用:

1.实体类

package com.zsl.test;

/** 
 * 实体类  
 * @author zsl
 * @version 2015年1月3日 19:10:10
 *
 */
public class Person   
      
    private int id;  
    private String name;  
    private String address;  
    private String email;  
    private double money;  
      
    @Override  
    public String toString()   
        // TODO Auto-generated method stub  
        return  "编号:"+id+"  名字:"+name+"   地址:"+address+"   E-mail:"+email+"  钱:"+money;  
      
    public Person()   
        // TODO Auto-generated constructor stub  
      
    public Person(int id, String name, String address, String email,  
            double money)   
        super();  
        this.id = id;  
        this.name = name;  
        this.address = address;  
        this.email = email;  
        this.money = money;  
      
    public int getId()   
        return id;  
      
    public void setId(int id)   
        this.id = id;  
      
    public String getName()   
        return name;  
      
    public void setName(String name)   
        this.name = name;  
      
    public String getAddress()   
        return address;  
      
    public void setAddress(String address)   
        this.address = address;  
      
    public String getEmail()   
        return email;  
      
    public void setEmail(String email)   
        this.email = email;  
      
    public double getMoney()   
        return money;  
      
    public void setMoney(double money)   
        this.money = money;  
      
      
  
  

2.json转换为实体对象

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

结果:

编号:0  名字:散仙0   地址:北京市0   E-mail:54152541@qq.com  钱:500.0


3.json转换为List<Person

<pre name="code" class="java"><span style="white-space:pre">	</span>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<Person> lists=g.fromJson(jsonBean1,new TypeToken<List<Person>>().getType()); for(Person pp:lists) System.out.println(pp);

 

 j结果:
 

编号:0  名字:散仙0   地址:北京市0   E-mail:54152541@qq.com  钱:500.0
编号:1  名字:散仙0   地址:北京市0   E-mail:54152541@qq.com  钱:500.0

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

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

String jsonBean="\\"id\\":0,\\"name\\":\\"散仙0\\",\\"address\\":\\"北京市0\\",\\"email\\":\\"54152541@qq.com\\",\\"money\\":500.0";
改为:(加上[ ])

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>";

结果:

Exception in thread "main" com.google.gson.JsonSyntaxException: <span style="color:#ff0000;">java.lang.IllegalStateException</span>: <span style="background-color: rgb(255, 255, 255);"><span style="color:#ff0000;">Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path</span></span> $
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:187)
	at com.google.gson.Gson.fromJson(Gson.java:805)
	at com.google.gson.Gson.fromJson(Gson.java:770)
	at com.google.gson.Gson.fromJson(Gson.java:719)
	at com.google.gson.Gson.fromJson(Gson.java:691)
	at com.zsl.test.Test.main(Test.java:25)
Caused by: <span style="color:#ff0000;">java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path</span> $
	at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:387)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)

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

String jsonBean1="[\\"id\\":0,\\"name\\":\\"散仙0\\",\\"address\\":\\"北京市0\\",\\"email\\":\\"54152541@qq.com\\",\\"money\\":500.0,\\"id\\":1,\\"name\\":\\"散仙0\\<span>		</span>",\\"address\\":\\"北京市0\\",\\"email\\":\\"54152541@qq.com\\",\\"money\\":500.0]";  
改为:(去掉[ ])

String jsonBean1="\\"id\\":0,\\"name\\":\\"散仙0\\",\\"address\\":\\"北京市0\\",\\"email\\":\\"54152541@qq.com\\",\\"money\\":500.0,\\"id\\":1,\\"name\\":\\"散仙0\\<span>		</span>",\\"address\\":\\"北京市0\\",\\"email\\":\\"54152541@qq.com\\",\\"money\\":500.0";  

结果:

Exception in thread "main" com.google.gson.JsonSyntaxException: <span style="color:#ff0000;">java.lang.IllegalStateException</span>: <span style="background-color: rgb(255, 255, 255);"><span style="color:#ff0000;">Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path</span></span> $
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:187)
	at com.google.gson.Gson.fromJson(Gson.java:805)
	at com.google.gson.Gson.fromJson(Gson.java:770)
	at com.google.gson.Gson.fromJson(Gson.java:719)
	at com.google.gson.Gson.fromJson(Gson.java:691)
	at com.zsl.test.Test.main(Test.java:25)
Caused by: <span style="color:#ff0000;">java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path</span> $
	at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:387)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)

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

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

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

<span style="white-space:pre">	</span>Person p=g.fromJson(jsonBean, Person.class);
如果是一个以上就直接用【json转List<实体对象>】的方法实现:

<span style="white-space:pre">	</span>List<Person> lists=g.fromJson(jsonBean1,new   TypeToken<List<Person>>().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
 */

以上是关于Gson的使用以及com.google.gson.JsonSyntaxException的解决方法的主要内容,如果未能解决你的问题,请参考以下文章

Could not find class com.google.gson.Gson

获取java.lang.NoClassDefFoundError:com / google / gson / gson

Gson格式化报错com.google.gson.JsonSyntaxException

Gson和fastJson的使用

nested exception is java.lang.NoClassDefFoundError: com/google/gson/Gson

com.google.gson.ExclusionStrategy 类型定义了多次