- 浏览: 2183834 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象。GSON核心jar包不到1M,非常精简,但提供的功能无疑是非常强大的,如果使用JDK自带的JSON解析API,使用起来相对比较繁琐一点,而且代码量较多。
下面通过一个表格来了解一下,GSON目前的发展状况
下图是,使用GSON转换时报的一个异常。
下面贴出,笔者的测试源码,注意上述异常,在代码的注释中已经指出问题原因
运行结果:
实体类Person:
体会到了GSON的强大了吧,GSON还可以使用注解简化,在这里笔者就不给出代码了,有兴趣的读者可以自己研究一下
下面通过一个表格来了解一下,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还可以使用注解简化,在这里笔者就不给出代码了,有兴趣的读者可以自己研究一下
- gson-2.2.4.jar (186 KB)
- 下载次数: 181
- gson-2.2.4-javadoc.jar (243.5 KB)
- 下载次数: 75
- gson-2.2.4-sources.jar (124.6 KB)
- 下载次数: 96
发表评论
-
记一次log4j不打印日志的踩坑记
2019-09-22 01:58 1565### 起因 前几天一个跑有java应用的生产集群(200多 ... -
在Java里面如何解决进退两难的jar包冲突问题?
2019-07-23 19:10 1231如上图所示: es api组件依赖guava18.0 ... -
如何轻松理解二叉树的深度遍历策略
2019-07-03 23:33 1124我们知道普通的线性数据结构如链表,数组等,遍历方式单一 ... -
为什么单线程Redis性能也很出色
2019-01-21 18:02 2205高性能的服务器,不一 ... -
如何将编程语言里面的字符串转成数字?
2019-01-11 23:23 2091将字符串转成数字在很 ... -
为什么Java里面String类是不可变的
2019-01-06 18:36 1666在Java里面String类型是不可变对象,这一点毫无疑问,那 ... -
关于Java里面volatile关键字的重排序
2019-01-04 18:49 1066Java里面volatile关键字主 ... -
多个线程如何轮流打印ABC特定的次数?
2018-12-11 20:42 6041之前的一篇文章,我给 ... -
聊聊Java里面的引用传递
2018-11-16 21:21 988长久以来,在Java语言里面一直有一个争论,就是Java语言到 ... -
理解计数排序算法的原理和实现
2018-10-11 10:03 2091计数排序(Counting sort) ... -
理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略
2018-09-06 11:31 3388### 前言 理解HashMap和Con ... -
关于Java里面多线程同步的一些知识
2018-07-18 09:45 1107# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
Java单例模式之双检锁深入思考
2018-07-08 12:25 3289# Java单例模式之双检锁 ... -
关于Java里面多线程同步的一些知识
2018-07-08 12:23 1120# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
重新认识同步与异步,阻塞和非阻塞的概念
2018-07-06 14:30 1473# 重新认识同步与异步 ... -
线程的基本知识总结
2018-06-27 16:27 1060### (一)创建线程的方式 (1)实现Runnable接口 ... -
Java里面volatile关键字修饰引用变量的陷阱
2018-06-25 11:42 1386# Java里面volatile关键字修饰引用变量的陷阱 如 ... -
关于Java里面的字符串拼接,你了解多少?
2018-06-25 11:28 1367# 关于Java里面的字符串 ... -
深入理解Java内存模型的语义
2018-06-25 11:39 739### 前言 Java内存模型( ... -
如何证明Java多线程中的成员变量数据是互不可见的
2018-06-21 10:09 1501前面的几篇文章主要介绍了Java的内存模型,进程和线程的定义, ...
相关推荐
Gson作为Java对象和JSON转换的利器,通过其强大的功能和简洁的API,简化了开发者在JSON数据处理中的工作。无论是基本类型还是复杂对象,Gson都能轻松应对,同时提供了自定义转换的灵活性,使得在实际项目中更加...
Gson是Google开发的一款强大的Java库,用于在Java对象和JSON数据之间进行映射。它的全称是Google Simple JSON,其版本2.3.1是一个较为稳定且广泛使用的版本,适用于许多Android和Java项目。本篇文章将深入探讨Gson ...
文件包括(1.GSON的jar包。2.GSON的源码。3.Gson的HTML和CHM的API文档)。...JSON采用完全独立于语言的文本格式解析快速、方便。GSON在以Java开发的C/S(包括B/S)中有很好的发挥,GSON是Google开发的。
总结来说,Gson-jar资源是Java开发中处理JSON的利器,提供了方便、高效的序列化和反序列化功能,对于任何需要与JSON格式数据打交道的Java项目来说,都是不可或缺的工具。使用Gson,你可以轻松地在Java对象和JSON之间...
在Java开发中,处理JSON数据通常需要借助JSON解析库,如Gson、Jackson、org.json等。本文档介绍的“json格式数据解析工具类”正是为了简化这一过程而设计的,通过这个工具类,开发者可以直接传入JSON字符串,调用...
7. **延迟解析**:通过`JsonParser`类,Gson允许逐步解析大型JSON文档,只加载当前需要的部分,以节省资源。 8. **性能优化**:Gson经过精心设计和优化,具有较高的性能,适合在大规模应用中使用。 总之,Gson是一...
在Android开发中,Gson库特别受欢迎,因为它提供了简单而强大的API,使得JSON解析变得极其便捷。 在标题中的"gson-2.3.1.zip",指的是Gson库的特定版本——2.3.1的压缩包文件。这个版本可能包含了库的所有源代码、...
`com.alibaba.fastjson`是阿里巴巴开发的...在处理JSON数据时,`fastjson`的高效、易用和全面性使得它成为首选的JSON解析库。通过理解并熟练使用`fastjson`,开发者可以提高代码的可读性和运行效率,简化数据处理流程。
总之,Gson-2.7.jar是Java开发中处理JSON数据的利器,其高效、灵活的特点使其在各种项目中都有广泛的应用。无论是新手还是经验丰富的开发者,都能从中受益,轻松地在Java对象和JSON数据之间穿梭。
这通常通过JSON库来实现,如Jackson、Gson或Fastjson等。这些库提供了API,可以将JSON字符串转化为JSON对象或者JSON数组。 2. **映射属性**:解析后的JSON对象会被映射到JavaBean的属性上。这个过程需要考虑到JSON...
在标签中提到的"json解析"和"gson解析",Gson是Google提供的一款Java库,能够将Java对象转换为JSON字符串,反之亦然。HiJson可能集成了Gson库,允许用户在处理JSON数据时直接与Java对象进行交互,提供了更强大的功能...
总结来说,AsyncHttp、HttpCore和Gson分别是处理异步网络请求、基础HTTP协议操作和JSON解析的利器。它们在Java和Android开发中广泛应用,帮助开发者高效地处理网络通信和数据交换。通过将这三个库集成到项目中,...
此外,随着Java生态的发展,出现了许多其他JSON库,如Jackson、Gson、Fastjson等,它们提供了更丰富的功能和更高的性能。这些库可能更适合大型项目或者有特定需求的开发环境。因此,在选择JSON处理库时,应根据项目...
它能够解析JSON文本,并自动生成与之对应的实体类代码,避免了手动创建和维护这些类的繁琐工作。 这个工具可能具备以下特点: 1. **易用性**:工具简单好用,说明用户界面直观,操作流程简洁,无需复杂设置即可快速...
在IT行业中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web服务与客户端之间的...无论是在Web服务开发、Android应用还是其他Java相关项目中,Gson都是处理JSON数据不可或缺的利器。
《深入理解阿里巴巴FastJson:高效JSON解析与生成的利器》 在现代的互联网开发中,JSON(JavaScript Object Notation)已经成为数据交换的主要格式,广泛应用于前后端交互、API设计以及数据存储等领域。为了提高...
3. JSON解析与生成:结合其他JSON库,如Gson或Jackson,可以利用ezmorph的强大转换能力处理JSON数据的解析和序列化过程。 在实际应用中,ezmorph-1.0.6通常与其他JSON库结合使用,以实现更全面的JSON操作。例如,...
Java中的JSON处理通常依赖于特定的库,而“Json jar包”正是这样的一个库,方便开发者在Java项目中解析、生成和操作JSON数据。 在Java中,常见的JSON库有Jackson、Gson、org.json等。这些库提供了API,让开发者可以...
- 第三方库:Java标准库并未内置JSON解析功能,但有多种第三方库提供了方便的JSON操作,比如Gson、fastjson和Jackson。这些库需要通过Maven或Gradle等构建工具引入相应的依赖jar包。 - Gson库:Google开发的Gson库...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,被广泛用于前后端交互,它以文本形式存储和传输数据,易于人阅读和编写,同时也易于机器解析和生成。实体类(Entity Class)是Java或其他面向对象...