超棒的Gson库 - 实现json的序列化和反序列化

本文介绍了Gson库在处理JSON数据时相较于其他库的优势,特别是其强大的反序列化功能,使得操作JSON数据更加简便。通过实例展示了如何使用Gson进行序列化与反序列化,并提供了与其他JSON库的比较,如JSONLib、FlexJSON等。

之前一直用的是官网上的库:http://www.json.org/java/index.html

个人体验,这个库的毛病挺多的,比如在将JSONObject转换成String的过程中会产生大量的临时性的String对象(因为没用StringBuffer),更郁闷的一个问题是,它可以很容易的将Java的某个对象序列化成JSON格式的字符串,比如:

MyObject myobj = new MyObject(); JSONObject jsonobj = new JSONObject(myobj); String jsonstr = jsonobj.toString();但是,你没有办法反序列化回来: jsonstr -> myobj
如果想得到这个效果,就只能很笨的自己动手将myobj的那些变量一个个从jsonstr中提取出来,然后重新拼装。

今天在网上搜了一下,才发现基于JAVA的JSON库原来还有很多,而且许多都要强于官网版。
本文介绍的是其中的一个: google-gson(Gson)
Link: http://code.google.com/p/google-gson/

之所以用它是因为这个库能够实现反序列化的功能,而且代码超简单:
序列化:

MyObject myobj = new MyObject(); String jsonstr = new Gson().toJson(myobj);反序列化:
MyObject myobj = new Gson().fromJson(jsonstr, MyObject.class);
最后,附上stackoverflow上关于几个JSON库的比较:

JSONLib is awsesome as a core JSON library when you just want to process all elements of a JSON.

JSONArray cms = jsonObject.getJSONArray("containerManifests"); for (Object o : cms) { JSONObject cm = (JSONObject) o; String cmId = cm.getString( "cmId" ); }

FlexJSON shines with its deepSerialize method that can properly handle serializing all get methods presented in a bean obtained from Hibernate (lazy loaded).

ContainerManifest cm = cmDAO.read( cmId ); String cmJson = new JSONSerializer().deepSerialize( cm );Gson seems to be the best API to use when you want to convert a json to a Java class. Other API only call set methods on the high level classes in the bean structure. If you have a deep bean structure, everything else will be implemented with dyna beans. Causes havoc elsewhere. Gson fully populates all low level values by calling all set methods for all data found in the JSON.
Gson gson = new Gson(); ContainerManifest cm = gson.fromJson( json, ContainerManifest.class );

C#科学计算讲义-宋叶志-人民邮电出版社 内容概要 《C#科学计算讲义》较为详细地介绍了科学计算方法,并对算法给出了源代码。关于算法部分主要介绍了线性方程组的迭代解法与直接解法、正交变换与最小二乘计算方法、鲁棒估计、随机数的产生、插值法、非线性方程求解、多元非线性最优化算法、微分方程数值方法等内容。 本书还给出了C#程序设计的基本方法,并对科学计算中要用到的矩阵向量类的构造做了详细阐述。算法的实现本身不限于具体的语言,本书对于算法的描述是较为详细的,所以读者也很容易把算法改用Fortran、 MATLAB、C++、Java 等语言编程实现。 宋叶志、徐导和何峰编著的《C#科学计算讲义》适合作为大学理工科本科生或研究生计算方法、数值分析课程的教材或参考书。对于从事相关学科教学的教师,如果不熟悉现代编程语言,也可以选择本书作为工具书。本书还可以用作科研人员的工程计算工具书与算法集。另外,在一些需要进行数据处理与分析的公司,如数量金融、统计等行业,也可以选用本书作为培训教材,或直接应用书上的源代码进行软件开发。 书籍目录 第1章 C#程序设计基础  1.1 计算机、程序设计与算法  1.1.1 计算机结构  1.1.2 操作系统  1.1.3 机器语言与高级语言  1.1.4 程序设计与算法  1.2 C#历史与概述  1.2.1 C语言:结构化编程语言的高峰  1.2.2 C++语言: 面向对象与大型程序  1.2.3 Java语言:可移植、安全性与Internet  1.2.4 C#: .NET主打语言  1.3 集成开发环境介绍  1.4 面向对象程序设计  1.4.1 封装  1.4.2 多态  1.4.3 继承  1.5 数据类型与运算符  1.5.1 简单数据类型  1.5.2 数组  1.5.3 运算符  1.5.4 赋值运算符  1.6 程序控制结构  1.6.1 顺序结构  1.6.2 分支结构  1.6.3 循环结构  1.6.4 控制结构的嵌套  1.7 类的设计及对象实现  1.7.1 定义类  1.7.2 创建对象  1.7.3 方法  1.7.4 构造函数  1.7.5 析构函数与垃圾回收  1.8 运算符重载及索引器  1.8.1 运算符重载  1.8.2 索引器  1.8.3 面向对象思想在C#程序设计中的重要性  1.9 GUI编程  1.10 本章小结 第2章 线性方程组迭代解法  第3章 线性方程组的直接解法 第4章 正交变换与最小二乘计算方法 第5章 鲁棒估计 第6章 随机数 第7章 插值法 第8章 非线性方程数值解法 第9章 非线性最优化 第10章 常微分方程(组)的数值方法 附录A C# 数值代数类的抽象与设计  附录B 动态链接与混合编程  B.1 静态链接与动态链接  B.2 C#调用Fortran动态链接范例  B.3 调用可执行函数  附录C Linux下C#开发与跨平台编程介绍  C.1 Mono简介  C.2 Linux下C#IDE开发范例  参考文献 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值