FastJson详细介绍

发布时间:2024年01月16日

一、FastJson介绍

? Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,也可以将 JSON 字符串转换为 Java 对象。

二、pom依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.3</version>
</dependency>

<dependency>
    <groupId>com.colobu</groupId>
    <artifactId>fastjson-jaxrs-json-provider</artifactId>
    <version>0.3.1</version>
</dependency>

三、将 Java 对象转换为 JSON 格式

1、 定义一个名为 Person 的 JavaBean类

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

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {

    @JSONField(name="USERNAME",ordinal = 1)
    private String username;

    @JSONField(name="AGE",ordinal = 2)
    private int age;

    //排除不需要序列化的字段
    @JSONField(serialize = false)
    private String birthday;

}

2、可以使用 JSON.toJSONString() 将 Java 对象转换换为 JSON 对象:

import com.alibaba.fastjson.JSON;
import org.junit.Test;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

public class TestFastJSON {

    //Java对象转JSON
    @Test
    public void javaBeanToJSON(){

        //创建Person对象
        Person p = new Person("张三",16, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));

        //使用JSON对象的 toString方法将对象转换为JOSN数据
        String s = JSON.toJSONString(p);

        System.out.println(s);
        //{"age":16,"birthday":"2024-01-16 21:59:23","username":"张三"}
    }


    //List集合转Json
    @Test
    public void ListToJSON(){

        //创建Person对象
        Person p1 = new Person("张三",15, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        Person p2 = new Person("李四",16, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
        Person p3 = new Person("王五",13, new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));

        List<Person> list = new ArrayList<>();

        Collections.addAll(list,p1,p2,p3);

        //使用JSON对象的 toString方法将对象转换为JOSN数据
        String s = JSON.toJSONString(list);

        System.out.println(s);
        //[{"age":15,"birthday":"2024-01-16 22:00:05","username":"张三"},{"age":16,"birthday":"2024-01-16 22:00:05","username":"李四"},{"age":13,"birthday":"2024-01-16 22:00:05","username":"王五"}]
        

    }

}

3、 Fastjson中的 @JSONField 注解

  • 通过 @JSONField 我们可以自定义字段的名称进行输出,并控制字段的排序,还可以进行序列化标记。
    • 指定name属性, 字段的名称
    • 使用 ordinal属性, 指定字段的顺序
    • 使用 serialize属性, 指定字段不序列化
@Data
public class Person {
	
    //自定义输出的名称, 并且进行输出排序
    @JSONField(name="USERNAME",ordinal = 1)
    private String username;

    @JSONField(name="AGE",ordinal = 2)
    private int age;

    //排除不需要序列化的字段
    @JSONField(serialize = false)
    private String birthday;

    public Person() {
    }

    public Person(String username, int age, String birthday) {
        this.username = username;
        this.age = age;
        this.birthday = birthday;
    }
}

四、JSON 字符串转换为 Java 对象

  • JSON.parseObject()
    • 可以使用 JSON.parseObject() 将 JSON 字符串转换为 Java 对象。
    • 注意反序列化时为对象时,必须要有默认无参的构造函数,否则会报异常
  • JSON.parseArray()
    • 可以使用 JSON.parseArray() 将 JSON 字符串转换为 集合对象。
import com.alibaba.fastjson.JSON;
import org.junit.Test;

import java.util.List;

public class JSONToJavaBean {

    //JSON转Java对象
    @Test
    public void JSONToJavaBeanTest(){

        String json = "{\"age\":12,\"birthday\":\"2024-01-01 10:00:00\",\"username\":\"张三\"}";
        Person person = JSON.parseObject(json, Person.class);
        System.out.println(person);

        System.out.println("===================================");

        //创建Person对象
        String json2 ="[{\"age\":15,\"birthday\":\"2024-01-16 22:00:05\",\"username\":\"张三\"},{\"age\":16,\"birthday\":\"2024-01-16 22:00:05\",\"username\":\"李四\"},{\"age\":13,\"birthday\":\"2024-01-16 22:00:05\",\"username\":\"王五\"}]";
        List<Person> list  = JSON.parseArray(json2,Person.class);
        System.out.println(list);

    }
}
文章来源:https://blog.csdn.net/CAUC_lin/article/details/135636746
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。