FastJson的使用

介绍

FastJson据说是目前为止最快的JSON库,好吧,他说是就是了。

FastJson 的Wiki在这里:https://github.com/alibaba/fastjson/wiki/

Quick_Start 在这里:https://github.com/alibaba/fastjson/wiki/Quit_Start_cn

FastJson的API非常简单:

String text = JSON.toJSONString(obj); //序列化
VO vo = JSON.parseObject("{...}", VO.class); //反序列化

上代码

接着,上菜,不,上代码:
这里需要注意一个核心思想:JSON中的键值对就是Java中的Map,JSON中的数组就是Java中的List

POJO对象

package com.owen.fastjson.bean;

/**
 * POJO对象
 * 
 * @author Owen
 */
public class UserInfo {

    private String name;

    private int age;

    /**
     * FastJSON要求:需要提供默认构造方法
     */
    public UserInfo() {}

    public UserInfo(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

}

测试类

package com.owen.fastjson.app;

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

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.owen.fastjson.bean.UserInfo;

/**
 * 测试类
 * 
 * @author Owen
 */
public class Main {

    /**
     * 简单序列化
     */
    private static void simpleTest() {
        UserInfo userInfo = new UserInfo("owen", 24);
        String jsonStr = JSON.toJSONString(userInfo);
        System.out.println(jsonStr);
    }

    /**
     * 复杂序列化
     */
    public static void complexTest() {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("username", "owen");
        map.put("age", 25);
        map.put("sex", "男");

        Map<String, Object> temp = new HashMap<String, Object>();
        temp.put("name", "jack");
        temp.put("age", 18);
        map.put("girinfo", temp);

        List<String> list = new ArrayList<String>();
        list.add("爬山");
        list.add("电影");
        list.add("旅游");
        map.put("hobby", list);

        String jsonStr = JSON.toJSONString(map);
        System.out.println(jsonStr);
    }

    /**
     * 日期序列化
     */
    public static void DateTest() {
        Date date = new Date();
        // 默认输出
        System.out.println("时间戳=" + JSON.toJSONString(date));
        // 默认的日期格式
        System.out.println("当前日期=" + JSON.toJSONString(date, SerializerFeature.WriteDateUseDateFormat));
        // 使用指定的日期格式
        System.out.println("当前日期=" + JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteDateUseDateFormat));
    }

    /**
     * 简单反序列化
     */
    public static void simpleDeserializeTest() {
        String userInfoJSONStr = "{\"name\":\"owen\", \"age\":24}";
        UserInfo userInfo = JSON.parseObject(userInfoJSONStr, UserInfo.class);
        System.out.println("name = " + userInfo.getName() + ", age = " + userInfo.getAge());
    }

    /**
     * 泛型反序列化
     */
    public static void genericTypeDeserializeTest() {
        String jsonStr = "{\"user\":{\"name\":\"owen\", \"age\":24}";
        Map<String, UserInfo> map = JSON.parseObject(jsonStr, new TypeReference<Map<String, UserInfo>>() {});
        System.out.println(map.get("user").getAge() + "\n");

        String jsonStr2 = "{\"user\":[{\"name\":\"owen\", \"age\":24}, {\"name\":\"jack\", \"age\":18}]";
        Map<String, List<UserInfo>> users = JSON.parseObject(jsonStr2, new TypeReference<Map<String, List<UserInfo>>>() {});
        for (UserInfo info : users.get("user")) {
            System.out.println("name=" + info.getName());
            System.out.println("age=" + info.getAge());
            System.out.println("------------------");
        }
    }

    /**
     * test
     */
    public static void main(String[] args) {
        genericTypeDeserializeTest();
    }

}

import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer; 
import com.alibaba.fastjson.serializer.SimplePropertyPreFilter; 

public class TestFastjson { 

//fastjson序列化单个对象 与反序列化 
@Test 
public void test1() { 
Employee e = new Employee("001", "张三", 23, new Date()); 

//序列化 
String jsonStr = JSON.toJSONString(e); 
System.out.println(jsonStr); 

//反序列化 
Employee emp = JSON.parseObject(jsonStr, Employee.class); 
System.out.println(emp.getName()); 


//fastjson序列化list集合 与反序列化 
@Test 
public void test2() { 
Employee e = new Employee("001", "张三", 23, new Date()); 
Employee e2 = new Employee("002", "李四", 29, new Date()); 

List<Employee> emps = new ArrayList<Employee>(); 
emps.add(e); 
emps.add(e2); 

//fastjson序列化list, 返回来的是一个json数组,由[]包含两个json 
String jsonArryStr = JSON.toJSONString(emps); 
System.out.println(jsonArryStr); 

// //反序列化 
//法一 
// List<Employee> empList = JSON.parseObject(jsonArryStr, new TypeReference<List<Employee>>(){} ); 
//法二 
List<Employee> empList = JSON.parseArray(jsonArryStr,Employee.class); 
for (Employee employee : empList) { 
System.out.println(employee.getName()); 
System.out.println(employee.getBirthDay()); 





//fastjson序列化复杂对象 与反序列化 
@Test 
public void test3() { 
Employee e = new Employee("001", "张三", 23, new Date()); 
Employee e2 = new Employee("002", "李四", 29, new Date()); 

List<Employee> emps = new ArrayList<Employee>(); 
emps.add(e); 
emps.add(e2); 

Dept dept = new Dept("d001", "研发部", emps); 

//序列化 
String jsonStr = JSON.toJSONString(dept); 
System.out.println(jsonStr); 

//反序列化 
Dept d = JSON.parseObject(jsonStr, Dept.class); 
System.out.println(d.getName()); 

//json转map 
//法一 
Map<String, Object> map1 = JSON.parseObject(jsonStr);//返回JSONObject,JSONObject实现Map<String, Object>接口 
//法二 
// Map<String, Object> map1 = (Map<String, Object>)JSON.parse(jsonStr); 
for (String key : map1.keySet()) { 
System.out.println(key + ":" + map1.get(key)); 



//fastjson 的 JSONObject的使用 
@Test 
public void test4() { 
Employee e = new Employee("001", "张三", 23, new Date()); 

//序列化 
String jsonStr = JSON.toJSONString(e); 
System.out.println(jsonStr); 

//反序列化 (可以和test1比较)  
JSONObject emp = JSON.parseObject(jsonStr, JSONObject.class); 
System.out.println(emp); 
System.out.println(emp.getString("name")); 

//再放一个Employee不存在的字段 
emp.put("salary", "8000"); 
System.out.println(emp.toJSONString()); 
System.out.println(emp.get("salary")); 



//fastjson序列化字符串 
@Test 
public void test5(){ 

List<String> strs = new ArrayList<String>(); 
strs.add("hello"); 
strs.add("world"); 
strs.add("banana"); 

//序列化 
String jsonStr = JSON.toJSONString(strs); 
System.out.println(jsonStr); 

//反序列化 
List<String> strList = JSON.parseObject(jsonStr, new TypeReference<List<String>>(){} ); 
// List<String> strList = JSON.parseArray(jsonStr, String.class);//等同于上一句 
for (String str : strList) { 
System.out.println(str); 



//fastjson过滤字段 
@Test 
public void test6() { 

Employee e = new Employee("001", "张三", 23, new Date()); 
Employee e2 = new Employee("002", "李四", 29, new Date()); 

List<Employee> emps = new ArrayList<Employee>(); 
emps.add(e); 
emps.add(e2); 

//构造过滤器 
SimplePropertyPreFilter filter = new SimplePropertyPreFilter(Employee.class, "id", "age"); 
String jsonStr =JSON.toJSONString(emps, filter); 

System.out.println(jsonStr); 



//fastjson 日期处理 
@Test 
public void test7(){ 

Date date = new Date(); 

String dateStr = JSON.toJSONString(date); 
System.out.println(dateStr); 

String dateStr2 = JSON.toJSONStringWithDateFormat(date, "yyyy-MM-dd HH:mm:ss"); 
System.out.println(dateStr2); 

//序列化实体 
Employee emp = new Employee("001", "张三", 23, new Date()); 

//法一 
String empStr = JSON.toJSONStringWithDateFormat(emp, "yyyy-MM-dd HH:mm:ss"); 
System.out.println(empStr); 

//法二 
String empStr2 = JSON.toJSONString(emp, SerializerFeature.WriteDateUseDateFormat); 
System.out.println(empStr2); 

//法三 
SerializeConfig config = new SerializeConfig(); 
config.put(Date.class, new SimpleDateFormatSerializer("yyyy年MM月dd日 HH时mm分ss秒")); 
String empStr3 = JSON.toJSONString(emp, config); 
System.out.println(empStr3); 


//fastjson 去掉值的双引号 实现JSONAware接口 
@Test 
public void test8(){ 
//见同级目录的Function.java 



//fastjson 注解形式  (别名命名, 过滤字段, 日期格式) 
@Test 
public void test9(){ 
Student stu = new Student("001", "张三", 23, new Date()); 
String jsonStr = JSON.toJSONString(stu); 
System.out.println(jsonStr); 



}


文/程序猴(简书作者)
原文链接:http://www.jianshu.com/p/a04c428963a2
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值