Java Json 序列化与反序列化

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)

Fastjson 官网:http://code.alibabatech.com/wiki/display/FastJSON/Overview

下面通过一个简单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工具类

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);
    } 

}
时间: 2024-08-14 21:44:32

Java Json 序列化与反序列化的相关文章

Java下用Jackson进行JSON序列化和反序列化(转)

Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的JSON操作方法. 一.准备工作 首先去官网下载Jackson工具包,下载地址http://wiki.fasterxml.com/JacksonDownload.Jackson有1.x系列和2.x系列,截止目前2.x系列的最新版本是2.9.0,2.x系列有3个jar包需要下载: jackson-cor

Java的序列化与反序列化

Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化与反序列化 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本.图片.音频.视频等, 而这些数据都会以二进制序列的形式在网络上传送.那么当两个Java进程进行通信时,能否实现进程间的对象传送

Java对象序列化和反序列化

Java对象序列化和反序列化 在Java中,我们如果要保存一个对象的瞬时状态值,以便在下次使用时能够得到这些值,或者持久化对象,或者使用RMI(远程方法调用),或在网络中传递对象时,此时我们就需要将对象序列化,实现序列化,我们只要实现Serializable接口,该接口是一个标记接口(Tag interface),即里面没有方法,其主要作用就是告诉JVM该类的对象可以进行序列化. 一般来说,很多类的对象都实现了Serializable接口,但是,有些对象是不能进行序列化的,比如与数据库相关的连接

java 对象序列化与反序列化

Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化  Java序列化是指把Java对象转换为字节序列的过程: Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化与反序列化 我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本.图片.音频.视频等, 而这些数据都会以二进制序列的形式在网络上传送.那么当两个Java进程进行通信时,能否实现进程间的

Java对象序列化与反序列化

Java对象序列化与反序列化 对象序列化的目标是将对象保存在磁盘中或者在网络中进行传输.实现的机制是允许将对象转为与平台无关的二进制流. java中对象的序列化机制是将允许对象转为字节序列.这些字节序列可以使Java对象脱离程序存在,从而可以保存在磁盘上,也可以在网络间传输. 对象的序列化是将一个Java对象写入IO流:与此对应的,反序列化则是从IO流中恢复一个Java对象. 实现序列化 如果要将一个java对象序列化,那么对象的类需要是可序列化的.要让类可序列化,那么这个类需要实现如下两个接口

DotNet的JSON序列化与反序列化

JSON(JavaScript Object Notation)JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.在现在的通信中,较多的采用JSON数据格式,JSON有两种表示结构,对象和数组,JSON 数据的书写格式是:名称/值对. 在vs解决方案中以前采用xml树的形式,组织项目的结构.在新的.net core中,项目的解决方案采用json作为项目的结构说明. 在.net的前后台数据交互中,采用序列化对象为json,前端ajax接受传输数据,反序列化为对象,在

JSON序列化和反序列化

1.JSON序列化 string JsonStr= JsonConvert.SerializeObject(Entity); eg: A a=new A(); a.Name="Elain00"; a.Hobby="eat eat"; string jsonStr=JsonConvert.SerializeObject(a); 2.JSON反序列化 string jsonstr = "jsonString"; Class model = JsonC

C#中JSON序列化和反序列化

json序列化和反序列化帮助类: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; using System.IO; using System.Text.RegularExpressions; using System.We

newtonsoft.json 序列化,反序列化

public class Book { public string BookID { get; set; } public DateTime PublishDate { get; set; } public decimal Price { get; set; } public override string ToString() { return "ID:" + BookID + "; Date:" + PublishDate.ToShortDateString()