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