fastjson


学习链接:https://www.bilibili.com/video/BV1y5411s7jk

FastJson源码地址:https://github.com/alibaba/fastjson

FastJson中文Wiki:https://github.com/alibaba/fastjson/wiki/Quick-Start-CN

中文手册 : 2-2Fastjson JSONField - FastJson中文手册 (dba.cn)

教程:Fastjson 简明教程 | 菜鸟教程 (runoob.com)

  (60条消息) FastJson笔记_codertl-CSDN博客

1、FastJson简介

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

2、FastJson优点

   1. 速度快

    fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。

      2. 使用广泛

    fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。

   3. 测试完备

    fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定。

     4. 使用简单

    fastjson的API十分简洁。

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

3、使用

  3.1  配置maven

  <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.58</version>
        </dependency>
    </dependencies>

  3.2  @JSONField

    3.2.1 注意:

      FastJson 在进行操作时,是根据 getter 和 setter 的方法进行的,并不是依据 Field 进行。

      若属性是私有的,必须有 set 方法。否则无法反序列化。

    3.2.2 @JSONField

package com.alibaba.fastjson.annotation;

public @interface JSONField {
    // 配置序列化和反序列化的顺序,1.1.42版本之后才支持
    int ordinal() default 0;

     // 指定字段的名称
    String name() default "";

    // 指定字段的格式,对日期格式有用
    String format() default "";

    // 是否序列化
    boolean serialize() default true;

    // 是否反序列化
    boolean deserialize() default true;
}

    3.2.3 FieldInfo可以配置在getter/setter方法或者字段

      3.2.3.1 配置在getter setter上

 public class A {
      private int id;

      @JSONField(name="ID")
      public int getId() {return id;}
      @JSONField(name="ID")
      public void setId(int value) {this.id = id;}
 }

    3.2.3.2 配置在field上

  public class A {
      @JSONField(name="ID")
      private int id;

      public int getId() {return id;}
      public void setId(int value) {this.id = id;}
 }

    3.2.3.3 使用format配置日期格式化

public class A {
      // 配置date序列化和反序列使用yyyyMMdd日期格式
      @JSONField(format="yyyyMMdd")
      public Date date;
 }

    3.2.3.4 使用serialize/deserialize指定字段不序列化

 public class A {
      @JSONField(serialize=false)
      public Date date;
 }

 public class A {
      @JSONField(deserialize=false)
      public Date date;
 }

    3.2.3.5 使用ordinal指定字段的顺序

public static class VO {
    @JSONField(ordinal = 3)
    private int f0;

    @JSONField(ordinal = 2)
    private int f1;

    @JSONField(ordinal = 1)
    private int f2;
}

  3.3 序列化与反序列化

    3.3.1 Java对象 转成 JSON字符串

Student stu = new Student();
stu.setName("张三");
stu.setAge(15);
stu.setAddress("成都");
 
// java对象 转换成 JSON 字符串
String jsonString = JSON.toJSONString(stu);
System.out.println(jsonString); // {"address":"成都","age":15,"name":"张三"}

    3.3.2 list集合转JSON格式的字符串

@Test
public void test1() {
    // List集合转 JSON字符串
    ArrayList<Student> list = new ArrayList<>();
    Student stu1 = new Student();
    stu1.setId(1);
    stu1.setAge(22);
    stu1.setName("king");
    stu1.setFlag(true);
    stu1.setAddress("成都");
 
    Student stu2 = new Student();
    stu2.setId(2);
    stu2.setAge(24);
    stu2.setName("green");
    stu2.setFlag(false);
    stu2.setAddress("重庆");
    list.add(stu1);
    list.add(stu2);
 
    String jsonString = JSON.toJSONString(list,SerializerFeature.PrettyFormat);
    System.out.println(jsonString);
}
/*
[
    {
        "address":"成都",
        "age":22,
        "flag":true,
        "id":1,
        "name":"king"
    },
    {
        "address":"重庆",
        "age":24,
        "flag":false,
        "id":2,
        "name":"green"
    }
]
*/

    3.3.3 Map集合转成 JSON字符串

@Test
public void test2() {
    
     // Map集合 转JSON格式字符串
    HashMap<String, Student> map = new HashMap<>();
 
    Student stu1 = new Student();
    stu1.setId(1);
    stu1.setAge(22);
    stu1.setName("king");
    stu1.setFlag(true);
    stu1.setAddress("成都");
 
    Student stu2 = new Student();
    stu2.setId(2);
    stu2.setAge(24);
    stu2.setName("green");
    stu2.setFlag(false);
    stu2.setAddress("重庆");
 
    map.put("stu1", stu1);
    map.put("stu2", stu2);
 
    String jsonString = JSON.toJSONString(map,SerializerFeature.PrettyFormat);
    System.out.println(jsonString);
}
/*
{
    "stu2":{
        "address":"重庆",
        "age":24,
        "flag":false,
        "id":2,
        "name":"green"
    },
    "stu1":{
        "address":"成都",
        "age":22,
        "flag":true,
        "id":1,
        "name":"king"
    }
}
*/

 

    3.3.4 JSON字符串 转换成 Java对象 parseObject

String data = "{\"address\":\"成都\",\"age\":15,\"name\":\"张三\"}";
JSONObject parseObject = JSON.parseObject(data);
// System.out.println(parseObject);
String address = parseObject.getString("address");
Integer age = parseObject.getInteger("age");
System.out.println(address); // 成都
System.out.println(age);  // 15

 

    3.3.5 JSON字符串 转成 List集合

@Test
public void test3() {
    // JSON格式字符串转成List 集合
    String jsonString = "[{\"address\":\"成都\",\"age\":22,\"flag\":true,\"id\":1,\"name\":\"king\"},{\"address\":\"重庆\",\"age\":24,\"flag\":false,\"id\":2,\"name\":\"green\"}]";
 
    List<Student> students = JSON.parseArray(jsonString, Student.class);
    for (Student stu :students) {
        System.out.println(stu);
    }
}
 
/*
Student(id=1, age=22, name=king, address=成都, flag=true)
Student(id=2, age=24, name=green, address=重庆, flag=false)
*/

 

    3.3.6 JSON字符串 转成 Map集合

@Test
public void test4() {
    // JSON格式字符串转成 Map集合
    String jsonString = "{\"stu2\":{\"address\":\"重庆\",\"age\":24,\"flag\":false,\"id\":2,\"name\":\"green\"},\"stu1\":{\"address\":\"成都\",\"age\":22,\"flag\":true,\"id\":1,\"name\":\"king\"}}";
 
    Map<String,Student> map = JSON.parseObject(jsonString, new TypeReference<HashMap<String, Student>>(){} );
    System.out.println(map);
}
/*
{
    stu2=Student(id=2, age=24, name=green, address=重庆, flag=false), 
    stu1=Student(id=1, age=22, name=king, address=成都, flag=true)
}
*/

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM