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

之前一直用的是官网上的库: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 );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的JSON序列化反序列化是将Java对象转换为JSON格式的字符串,或将JSON格式的字符串转换为Java对象的过程。 在Java中,可以使用各种来进行JSON序列化反序列化,比较常用的有以下几种: 1. Jackson:Jackson是一个功能强大且广泛使用的JSON处理,它提供了一系列的API来实现JSONJava对象之间的转换。通过Jackson,可以将Java对象转换为JSON字符串,或将JSON字符串转换为Java对象。 2. GsonGson是Google提供的一个简单易用的JSON处理,它可以将Java对象转换为JSON字符串,或将JSON字符串转换为Java对象。Gson提供了一些简单的API来实现序列化反序列化操作。 3. Fastjson:Fastjson是阿里巴巴开源的一个高性能的JSON处理,它支持将Java对象转换为JSON字符串,或将JSON字符串转换为Java对象。Fastjson提供了一些灵活的API来实现序列化反序列化操作。 这些都提供了类似的API,可以根据具体需求选择适合的进行使用。一般来说,使用这些进行JSON序列化反序列化的步骤如下: 1. 创建一个Java对象,并设置相应的属性值。 2. 使用JSON处理的API将Java对象转换为JSON字符串,或将JSON字符串转换为Java对象。 下面是一个使用Jackson进行JSON序列化反序列化的示例代码: ```java import com.fasterxml.jackson.databind.ObjectMapper; public class JsonSerializationExample { public static void main(String[] args) throws Exception { // 创建一个Java对象 Person person = new Person("John", 25); // 创建ObjectMapper对象 ObjectMapper objectMapper = new ObjectMapper(); // 将Java对象转换为JSON字符串 String jsonString = objectMapper.writeValueAsString(person); System.out.println("JSON String: " + jsonString); // 将JSON字符串转换为Java对象 Person deserializedPerson = objectMapper.readValue(jsonString, Person.class); System.out.println("Deserialized Person: " + deserializedPerson); } } class Person { private String name; private int age; public Person() {} public Person(String name, int age) { this.name = name; this.age = age; } // 省略getter和setter方法 @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } } ``` 这个示例中,首先创建了一个Person对象,然后使用ObjectMapper将Person对象转换为JSON字符串,并输出结果。接着,将JSON字符串转换为Java对象,并输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值