现在的位置: 首页 > 综合 > 正文

Java Json 序列化与反序列化

2013年03月18日 ⁄ 综合 ⁄ 共 5933字 ⁄ 字号 评论关闭

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition
- December 1999的一个子集。 JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换语言。


下面介绍两款自己在开发中常用的处理Json的Java开源类库:Gson和Fastjson

1、Gson

Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Gson can work with
arbitrary Java objects including pre-existing objects that you do not have source-code of.

Gson官网:http://code.google.com/p/google-gson/

Gson User Guide:https://sites.google.com/site/gson/gson-user-guide



2、Fastjson

Fastjson是一个json处理工具包,由阿里巴巴公司开发,包括“序列化”和“反序列化”两部分,它具备如下特征:

  1. 速度最快,测试表明,fastjson具有极快的性能,超越任其他的java json parser。包括自称最快的jackson。
  2. 功能强大,完全支持java bean、集合、Map、日期、Enum,支持范型,支持自省。
  3. 无依赖,能够直接运行在Java SE 5.0以上版本
  4. 支持Android。
  5. 开源 (Apache 2.0)
下面通过一个简单Demo,对比两者 序列化与反序列化的用法
JavaBean 实体Person
package com.example.testjson.entity;

import java.util.Date;
import java.util.List;
import java.util.Map;

public class Person {
    private String name;
    private FullName fullName;
    private int age;
    private Date birthday;
    private List<String> hobbies;
    private Map<String, String> clothes;
    private List<Person> friends;
    
    public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public FullName getFullName() {
		return fullName;
	}

	public void setFullName(FullName fullName) {
		this.fullName = fullName;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}

	public List<String> getHobbies() {
		return hobbies;
	}

	public void setHobbies(List<String> hobbies) {
		this.hobbies = hobbies;
	}

	public Map<String, String> getClothes() {
		return clothes;
	}

	public void setClothes(Map<String, String> clothes) {
		this.clothes = clothes;
	}

	public List<Person> getFriends() {
		return friends;
	}

	public void setFriends(List<Person> friends) {
		this.friends = friends;
	}

	@Override
    public String toString() {
        String str= "Person [name=" + name + ", fullName=" + fullName + ", age="
                + age + ", birthday=" + birthday + ", hobbies=" + hobbies
                + ", clothes=" + clothes +  "]\n";
        if(friends!=null){
            str+="Friends:\n";
            for (Person f : friends) {
                str+="\t"+f;
            }
        }
        return str;
    }
    
}

class FullName {
    private String firstName;
    private String middleName;
    private String lastName;
    
    public FullName(){
    }
    
    public FullName(String firstName, String middleName, String lastName) {
		super();
		this.firstName = firstName;
		this.middleName = middleName;
		this.lastName = lastName;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getMiddleName() {
		return middleName;
	}

	public void setMiddleName(String middleName) {
		this.middleName = middleName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	@Override
    public String toString() {
        return "[firstName=" + firstName + ", middleName="
                + middleName + ", lastName=" + lastName + "]";
    }
    
}
负责创建Person的Bean Factory
package com.example.testjson.entity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class PersonFactory {
	
	private static Person createABSPerson(String name,List<Person> friends) {
        Person newPerson = new Person();
        newPerson.setName(name);
        newPerson.setFullName(new FullName(name+"_first", name+"_middle", name+"_last"));
        newPerson.setAge(24);
        List<String> hobbies=new ArrayList<String>();
        hobbies.add("篮球");
        hobbies.add("游泳");
        hobbies.add("coding");
        newPerson.setHobbies(hobbies);
        Map<String,String> clothes=new HashMap<String, String>();
        clothes.put("coat", "Nike");
        clothes.put("trousers", "adidas");
        clothes.put("shoes", "安踏");
        newPerson.setClothes(clothes);
        newPerson.setFriends(friends);
        return newPerson;
    }
    
    public static Person create(String name){
        List<Person> friends=new ArrayList<Person>();
        friends.add(createABSPerson("小明",null));
        friends.add(createABSPerson("Tony",null));
        friends.add(createABSPerson("陈小二",null));

        return createABSPerson(name,friends);
    }
}
Gson 工具类GsonUtil
package com.example.testjson.gson;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

public class GsonUtil {
private static Gson gson = new GsonBuilder().create();
    
    public static String bean2Json(Object obj){
        return gson.toJson(obj);
    }
    
    public static <T> T json2Bean(String jsonStr,Class<T> objClass){
        return gson.fromJson(jsonStr, objClass);
    }
    
    public static String jsonFormatter(String uglyJsonStr){
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        JsonParser jp = new JsonParser();
        JsonElement je = jp.parse(uglyJsonStr);
        String prettyJsonString = gson.toJson(je);
        return prettyJsonString;
    }
}
Fastjson 工具类FastJsonUtil
package com.example.testjson.fastjson;

import com.alibaba.fastjson.JSON;

public class FastJsonUtil {
	
	public static String bean2Json(Object obj){
        return JSON.toJSONString(obj);
    }
    
    public static <T> T json2Bean(String jsonStr,Class<T> objClass){
        return JSON.parseObject(jsonStr, objClass);
    }
}
最后两个测试类
GsonTest
package com.example.testjson;

import com.example.testjson.entity.Person;
import com.example.testjson.entity.PersonFactory;
import com.example.testjson.gson.GsonUtil;

public class GsonTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Person p = PersonFactory.create("Kobe");
		String json = GsonUtil.bean2Json(p);
		String prettyJsonString = GsonUtil.jsonFormatter(json);
		
		System.out.println("FastJson Serializing="+json);
		System.out.println("FastJson Serializing PrettyPrinting="+prettyJsonString);
		
		Person newPerson = GsonUtil.json2Bean(json, Person.class);
		
		System.out.println("FastJson Deserializing="+newPerson);
	}

}
FastJsonTest

package com.example.testjson;

import com.example.testjson.entity.Person;
import com.example.testjson.entity.PersonFactory;
import com.example.testjson.fastjson.FastJsonUtil;

public class FastJsonTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Person p = PersonFactory.create("Kobe");
		String json = FastJsonUtil.bean2Json(p);
		
		System.out.println("FastJson Serializing="+json);
		
		Person newPerson = FastJsonUtil.json2Bean(json, Person.class);
		
		System.out.println("FastJson Deserializing="+newPerson);
	}

}



示例Demo下载:http://download.csdn.net/detail/fx_sky/6771327





抱歉!评论已关闭.