`
qindongliang1922
  • 浏览: 2188439 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117659
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126068
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:60013
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71397
社区版块
存档分类
最新评论

JSON之解析利器GSON

阅读更多
Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象。GSON核心jar包不到1M,非常精简,但提供的功能无疑是非常强大的,如果使用JDK自带的JSON解析API,使用起来相对比较繁琐一点,而且代码量较多。

下面通过一个表格来了解一下,GSON目前的发展状况


初始版本2008年5月22日
最新版本(稳定版本)2.2.4/2013年5月13日;2个月前
编程语言Java
操作平台各种平台
许可协议Apache License 2.0
官方网站http://code.google.com/p/google-gson/
下载地址http://code.google.com/p/google-gson/downloads/list
GSON帮助文档http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/index.html





下图是,使用GSON转换时报的一个异常。
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2
	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.demoone.UseGson.testOneBeanFromJSON(UseGson.java:54)
	at com.demoone.UseGson.main(UseGson.java:89)
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2   //注意这句话跟数组集合有关
	at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:374)
	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:165)
	... 6 more


下面贴出,笔者的测试源码,注意上述异常,在代码的注释中已经指出问题原因
package com.demoone;

import java.util.ArrayList;
import java.util.List;

import com.entity.Person;
import com.google.gson.Gson;
import com.google.gson.reflect.*;

/***
 * 
 * 使用gson
 * 进行序列化,反序列化的操作
 * json
 * 
 * **/
public class UseGson {
	
 static	Gson g=new Gson();
 /**
  * 
  * 由集合类型的实体类
  * 转换成Json类型
  * 
  * **/
	public static void testToJSON(){
		
		
		List<Person> list=new ArrayList<>();
		
		for(int i=0;i<2;i++){
		 Person p=new Person(i, "散仙"+i, "北京市"+i, "54152541@qq.com", 500.0);
            list.add(p);
		}
		String json=g.toJson(list);
		System.out.println(json);
		
	}
	
	
	/**
	 * 由json转换为实体类
	 * 
	 * */
	public static void testOneBeanFromJSON(){
		
	 
		/**
		 * 转换一个Java Bean的时候
		 * 记住不能使用[],只有在使用集合的时候才可以使用 
		 * 如上图贴的那个异常就是由此原因造成的,另外
		 * 格式要规范,中间不能出现空格字符
		 * 
		 * **/
		String jsonBean="[{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0}]";
		 Person p=g.fromJson(jsonBean, Person.class);
		 System.out.println(p);
 
	}
	
	/**
	 * 由json转换为实体类集合
	 * 
	 * */
	public static void testListBeanFromJSON(){
		
	 
 
		
		 /**
		  * 转换一个集合 的实体Bean
		  * 注意前面加上[]方括号,代表一个数组
		  * **/
   
		 
		  
		 
		 String  jsonBeanList="[{\"id\":0,\"name\":\"散仙0\",\"address\":\"北京市0\",\"email\":\"54152541@qq.com\",\"money\":500.0},{\"id\":1,\"name\":\"散仙1\",\"address\":\"北京市1\",\"email\":\"54152541@qq.com\",\"money\":500.0}]";
		 
		 List<Person> lists=g.fromJson(jsonBeanList,new   TypeToken<List<Person>>(){}.getType());
		 System.out.println("反序列之后");
		 for(Person pp:lists){
			 
			 System.out.println(pp);
		 }
	}
	
	
	public static void main(String[] args) {
		
		 testListBeanFromJSON();//测试集合反序列化
		 testOneBeanFromJSON();//测试单个实体类反序列化
		 //testToJSON();//测试序列化
		 
	}

}

运行结果:
testListBeanFromJSON()  方法:
反序列之后
编号:0  名字:散仙0   地址:北京市0   E-mail:54152541@qq.com  钱:500.0
编号:1  名字:散仙1   地址:北京市1   E-mail:54152541@qq.com  钱:500.0
testOneBeanFromJSON()  方法:
编号:0  名字:散仙0   地址:北京市0   E-mail:54152541@qq.com  钱:500.0



实体类Person:

package com.entity;

/**
 * 实体类
 * 
 * 
 * **/
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;
	}
	

}


体会到了GSON的强大了吧,GSON还可以使用注解简化,在这里笔者就不给出代码了,有兴趣的读者可以自己研究一下
分享到:
评论

相关推荐

    Java对象和JSON互转换利器-Gson

    Gson作为Java对象和JSON转换的利器,通过其强大的功能和简洁的API,简化了开发者在JSON数据处理中的工作。无论是基本类型还是复杂对象,Gson都能轻松应对,同时提供了自定义转换的灵活性,使得在实际项目中更加...

    gson 2.3.1 json转换利器

    Gson是Google开发的一款强大的Java库,用于在Java对象和JSON数据之间进行映射。它的全称是Google Simple JSON,其版本2.3.1是一个较为稳定且广泛使用的版本,适用于许多Android和Java项目。本篇文章将深入探讨Gson ...

    JavaScript利器GSON

    文件包括(1.GSON的jar包。2.GSON的源码。3.Gson的HTML和CHM的API文档)。...JSON采用完全独立于语言的文本格式解析快速、方便。GSON在以Java开发的C/S(包括B/S)中有很好的发挥,GSON是Google开发的。

    gson-jar的资源,处理json字符串请下载

    总结来说,Gson-jar资源是Java开发中处理JSON的利器,提供了方便、高效的序列化和反序列化功能,对于任何需要与JSON格式数据打交道的Java项目来说,都是不可或缺的工具。使用Gson,你可以轻松地在Java对象和JSON之间...

    json格式数据解析工具类

    在Java开发中,处理JSON数据通常需要借助JSON解析库,如Gson、Jackson、org.json等。本文档介绍的“json格式数据解析工具类”正是为了简化这一过程而设计的,通过这个工具类,开发者可以直接传入JSON字符串,调用...

    gson2.7.jar

    7. **延迟解析**:通过`JsonParser`类,Gson允许逐步解析大型JSON文档,只加载当前需要的部分,以节省资源。 8. **性能优化**:Gson经过精心设计和优化,具有较高的性能,适合在大规模应用中使用。 总之,Gson是一...

    gson-2.3.1.zip

    在Android开发中,Gson库特别受欢迎,因为它提供了简单而强大的API,使得JSON解析变得极其便捷。 在标题中的"gson-2.3.1.zip",指的是Gson库的特定版本——2.3.1的压缩包文件。这个版本可能包含了库的所有源代码、...

    com.alibaba.fastjson json解析工具包

    `com.alibaba.fastjson`是阿里巴巴开发的...在处理JSON数据时,`fastjson`的高效、易用和全面性使得它成为首选的JSON解析库。通过理解并熟练使用`fastjson`,开发者可以提高代码的可读性和运行效率,简化数据处理流程。

    gson-2.7.jar包

    总之,Gson-2.7.jar是Java开发中处理JSON数据的利器,其高效、灵活的特点使其在各种项目中都有广泛的应用。无论是新手还是经验丰富的开发者,都能从中受益,轻松地在Java对象和JSON数据之间穿梭。

    Json一键转Javabean工具

    这通常通过JSON库来实现,如Jackson、Gson或Fastjson等。这些库提供了API,可以将JSON字符串转化为JSON对象或者JSON数组。 2. **映射属性**:解析后的JSON对象会被映射到JavaBean的属性上。这个过程需要考虑到JSON...

    HiJson 2.1.2_jdk64.exe

    在标签中提到的"json解析"和"gson解析",Gson是Google提供的一款Java库,能够将Java对象转换为JSON字符串,反之亦然。HiJson可能集成了Gson库,允许用户在处理JSON数据时直接与Java对象进行交互,提供了更强大的功能...

    Asy+httpcore+gson.zip

    总结来说,AsyncHttp、HttpCore和Gson分别是处理异步网络请求、基础HTTP协议操作和JSON解析的利器。它们在Java和Android开发中广泛应用,帮助开发者高效地处理网络通信和数据交换。通过将这三个库集成到项目中,...

    json.org.jar

    此外,随着Java生态的发展,出现了许多其他JSON库,如Jackson、Gson、Fastjson等,它们提供了更丰富的功能和更高的性能。这些库可能更适合大型项目或者有特定需求的开发环境。因此,在选择JSON处理库时,应根据项目...

    Json生成实体类工具

    它能够解析JSON文本,并自动生成与之对应的实体类代码,避免了手动创建和维护这些类的繁琐工作。 这个工具可能具备以下特点: 1. **易用性**:工具简单好用,说明用户界面直观,操作流程简洁,无需复杂设置即可快速...

    flash2316.rar

    在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务与客户端之间的...无论是在Web服务开发、Android应用还是其他Java相关项目中,Gson都是处理JSON数据不可或缺的利器。

    fast-json.zip

    《深入理解阿里巴巴FastJson:高效JSON解析与生成的利器》 在现代的互联网开发中,JSON(JavaScript Object Notation)已经成为数据交换的主要格式,广泛应用于前后端交互、API设计以及数据存储等领域。为了提高...

    ezmorph-1.0.6

    3. JSON解析与生成:结合其他JSON库,如Gson或Jackson,可以利用ezmorph的强大转换能力处理JSON数据的解析和序列化过程。 在实际应用中,ezmorph-1.0.6通常与其他JSON库结合使用,以实现更全面的JSON操作。例如,...

    Json jar包

    Java中的JSON处理通常依赖于特定的库,而“Json jar包”正是这样的一个库,方便开发者在Java项目中解析、生成和操作JSON数据。 在Java中,常见的JSON库有Jackson、Gson、org.json等。这些库提供了API,让开发者可以...

    Java中的小知识—–JSON

    - 第三方库:Java标准库并未内置JSON解析功能,但有多种第三方库提供了方便的JSON操作,比如Gson、fastjson和Jackson。这些库需要通过Maven或Gradle等构建工具引入相应的依赖jar包。 - Gson库:Google开发的Gson库...

    Json实体类生成工具(精)

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端交互,它以文本形式存储和传输数据,易于人阅读和编写,同时也易于机器解析和生成。实体类(Entity Class)是Java或其他面向对象...

Global site tag (gtag.js) - Google Analytics