FastJson

FastJson,第1张

FastJson 1. Json 的概述

  JSON 是一种轻量级的数据格式。客户端和服务器之间传输的数据就是采用 JSON 的格式进行传输

2. FastJson 的概述

  FastJson 是阿里巴巴的开源 JSON 解析库,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 Java Bean


  FastJson 优点:

速度快使用广泛功能完备使用简单 3. 引入 FastJson 的依赖


    com.alibaba
    fastjson
    1.2.78

4. FastJson 的序列化

  序列化:是指将 Java 对象转化成 json 格式字符串的过程。JavaBean 对象、List 集合对象、Map 集合,为应用最广泛的

(1) 创建一个测试实体类
package com.peng.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private String email;
    private Date birth;
}
(2) Java 对象序列化为 Json 格式字符串
package com.peng.test;

import com.alibaba.fastjson.JSON;
import com.peng.domain.Student;

import java.util.Date;

public class demo {
    public static void main(String[] args) {
        Student student = new Student(1, "张三", 20, "[email protected]", new Date());
        // 将 Student 对象转化为 JSON 格式的字符串
        String jsonString = JSON.toJSONString(student);
        System.out.println(jsonString);
        // {"age":20,"birth":1643528834792,"email":"[email protected]","id":1,"name":"张三"}
    }
}

(3) List 集合序列化为 Json 字符串
package com.peng.test;

import com.alibaba.fastjson.JSON;
import com.peng.domain.Student;

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

public class demo {
    public static void main(String[] args) {
        List list = new ArrayList<>();
        list.add(new Student(1, "张三", 20, "[email protected]", new Date()));
        list.add(new Student(2, "李四", 18, "[email protected]", new Date()));
        // 将 List 集合序列化为 JSON 格式的字符串
        String jsonString = JSON.toJSONString(list);
        // 转后的结果是数组,数组的元素是对象
        System.out.println(jsonString);
        // [{"age":20,"birth":1643530026118,"email":"[email protected]","id":1,"name":"张三"},{"age":18,"birth":1643530026118,"email":"[email protected]","id":2,"name":"李四"}]
    }
}
(4) Map 集合序列化为 Json 字符串
package com.peng.test;

import com.alibaba.fastjson.JSON;
import com.peng.domain.Student;

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

public class demo {
    public static void main(String[] args) {
        Map map = new HashMap<>();
        map.put("student1", new Student(1, "张三", 20, "[email protected]", new Date()));
        map.put("student2", new Student(2, "李四", 18, "[email protected]", new Date()));
        String jsonString = JSON.toJSONString(map);
        // map 集合转化后的结果仍然是对象
        System.out.println(jsonString);
        // {"student2":{"age":18,"birth":1643530736537,"email":"[email protected]","id":2,"name":"李四"},"student1":{"age":20,"birth":1643530736537,"email":"[email protected]","id":1,"name":"张三"}}
    }
}

对象和 Map 集合转化后的 json 格式还是对象,List 集合转化后的 json 格式是数组

5. FastJson 的反序列化

  反序列化:把 json 格式的字符串转化成 Java 对象

(1) json 格式字符串反序列化为 Java 对象
package com.peng.test;

import com.alibaba.fastjson.JSON;
import com.peng.domain.Student;

public class demo {
    public static void main(String[] args) {
        String jsonString = "{"age":20,"birth":1643528834792,"email":"[email protected]","id":1,"name":"张三"}";
        // 参数1:反序列化的 json 字符串;参数2:Java 对象的 class 对象
        Student student = JSON.parseObject(jsonString, Student.class);
        System.out.println(student);
    }
}
(2) json 字符串反序列化为 List 集合
package com.peng.test;

import com.alibaba.fastjson.JSON;
import com.peng.domain.Student;

import java.util.List;

public class demo {
    public static void main(String[] args) {
        String jsonString = "[{"age":20,"birth":1643530026118,"email":"[email protected]","id":1,"name":"张三"},{"age":18,"birth":1643530026118,"email":"[email protected]","id":2,"name":"李四"}]";
        // 参数1:反序列化的 json 字符串;参数2:转换后集合的泛型的 class 对象
        List list = JSON.parseArray(jsonString, Student.class);
        System.out.println(list);
    }
}
(3) json 字符串反序列化为 Map 集合
package com.peng.test;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.peng.domain.Student;

import java.util.Map;

public class demo {
    public static void main(String[] args) {
        String jsonString = "{"student2":{"age":18,"birth":1643530736537,"email":"[email protected]","id":2,"name":"李四"},"student1":{"age":20,"birth":1643530736537,"email":"[email protected]","id":1,"name":"张三"}}";
        // 参数1:反序列化的 json 字符串;参数2:TypeReference 类型,在泛型中写转换后的 Map 集合
        Map map = JSON.parseObject(jsonString, new TypeReference>() {});
        map.forEach((k, v) -> System.out.println(k + "::" + v));
    }
}
6. @JsonType 注解

  只能作用在实体类上,对类的字段进行序列化和反序列化时的特性功能的定制

package com.peng.domain;

import com.alibaba.fastjson.annotation.JSONType;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor

@JSONType(includes = {"id", "name", "age", "birth"}, orders = {"name", "age", "id", "birth"})
public class Student {
    private Integer id;
    private String name;
    private Integer age;
    private String email;
    private Date birth;
}
7. @JsonField 注解

  一般作用在实体类的属性上,可在序列化和反序列化时进行特性功能的定制

package com.peng.domain;

import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private Integer id;
    
    @JSONField(name = "studentName")
    private String name;
    private Integer age;
    
    @JSONField(serialize = false)
    private String email;
    
    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date birth;
}
8. spring boot 与 FastJson

  spring boot默认的序列化方式是 jackson。我们如果想切换成 FastJson,需要配置一下

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5715900.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存