超棒的Gson库 - 实现json的序列化和反序列化
2011-07-27 18:57
661 查看
之前一直用的是官网上的库:http://www.json.org/java/index.html
个人体验,这个库的毛病挺多的,比如在将JSONObject转换成String的过程中会产生大量的临时性的String对象(因为没用StringBuffer),更郁闷的一个问题是,它可以很容易的将Java的某个对象序列化成JSON格式的字符串,比如:
如果想得到这个效果,就只能很笨的自己动手将myobj的那些变量一个个从jsonstr中提取出来,然后重新拼装。
今天在网上搜了一下,才发现基于JAVA的JSON库原来还有很多,而且许多都要强于官网版。
本文介绍的是其中的一个: google-gson(Gson)
Link: http://code.google.com/p/google-gson/
之所以用它是因为这个库能够实现反序列化的功能,而且代码超简单:
序列化:
最后,附上stackoverflow上关于几个JSON库的比较:
JSONLib is awsesome as a core JSON library when you just want to process all elements of a JSON.
个人体验,这个库的毛病挺多的,比如在将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 );
相关文章推荐
- Jackson实现json的序列化反序列化
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- 在C#中实现Json的序列化与反序列化
- JavaScriptSerializer实现JSON 序列化和反序列化
- Json工具类--使用1.x版本Jackson实现json的序列化和反序列化
- json [asp.net]C#实现json的序列化和反序列化
- 实现json的序列化和反序列化
- Json工具类--使用Gson实现了Json的序列化和反序列化
- JSON 序列化和反序列化——JavaScriptSerializer实现
- JSON 序列化和反序列化——JavaScriptSerializer实现
- C#实现json的序列化和反序列化
- .NET Framewok 3.5 中 JSON 序列化和反序列化的简单实现
- JSON 序列化和反序列化——JavaScriptSerializer实现
- JSON 序列化和反序列化——JavaScriptSerializer实现
- Json.Net学习(1) 实现简单的序列化和反序列化
- JSON 序列化和反序列化——JavaScriptSerializer实现
- C#实现JSON序列化与反序列化介绍
- ASP.NET C#使用JavaScriptSerializer实现序列化与反序列化得到JSON
- Json工具类--使用2.x版本的Jackson实现了Json的序列化和反序列化
- [asp.net]C#实现json的序列化和反序列化