FastJson

FastJson QuickStart

一、简介

Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象,它可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象

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

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

二、使用

(1) 引入依赖

maven仓库地址:https://mvnrepository.com/search?q=fastjson


    com.alibaba
    fastjson
    x.x.x

(2) @JSONField

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface JSONField {
    int ordinal() default 0;// 序列

    String name() default "";// 名称?

    String format() default "";// 格式化

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

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

    SerializerFeature[] serialzeFeatures() default {};

    Feature[] parseFeatures() default {};

    String label() default "";

    boolean jsonDirect() default false;

    Class serializeUsing() default Void.class;

    Class deserializeUsing() default Void.class;

    String[] alternateNames() default {};

    boolean unwrapped() default false;

    String defaultValue() default "";
}

1. 作用对象

  • Field
  • Setter 和 Getter 方法

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

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

2. ordinal - 序列

数字越小,排行越前,默认为0

@JSONField(ordinal = 3)
private int age;

3. name - 名称

转化为JSON格式字符串后,属性值的内容

@JSONField(name = "FULL NAME")
private String fullName;

4. format - 日期格式化

@JSONField(format="yyyy-MM-dd HH:mm:ss")
public Date date;

5. serialize - 序列化

@JSONField(serialize=false)
public Date date;

指定某个属性是否进行序列化

序列化:此处指由JavaBean ➡ JSON格式字符串

6. deserialize 反序列化

@JSONField(deserialize=false)
public Date date;

指定某个属性是否进行反序列化

反序列化:此处指由JSON格式字符串 ➡ JavaBean

必须存在getter + setter方法

public class Example {

    private List listOfPersons = new ArrayList();

    @Before
    public void setUp() {
        listOfPersons.add(new Person(15, "John Doe", new Date()));
        listOfPersons.add(new Person(20, "Janette Doe", new Date()));
    }

    @Test
    public void whenJavaList_thanConvertToJsonCorrect() {
        String jsonOutput= JSON.toJSONString(listOfPersons);
        System.out.println(jsonOutput);
    }
}

==输出结果==

[{
    "FULL NAME": "John Doe",
    "dateOfBirth": "2020-08-05 20:15:32",
    "age": 15
}, {
    "FULL NAME": "Janette Doe",
    "dateOfBirth": "2020-08-05 20:15:32",
    "age": 20
}]

三、相互转换

实体类

public class TbUser {

    private Long id;
    private String username;
    private String password;
    private String phone;
    private Date created;
    
    // 有参构造 + 无参构造
    // getter + setter
    // toString()
}

(1) JaveBean ➡ JsonStr

String jsonstr = JSON.toJSONString(T t);

// java对象转json字符串
@Test
public void beanTojson() {
    // 1.创建一个java对象
    TbUser user = new TbUser(1l, "zhangsan", "123", "13766669999", new Date());
    // 2.转换为jsonstr
    String jsonstr = JSON.toJSONString(user);
    System.out.println(jsonstr);
}

// java对象数组转json字符串
@Test
public void beanArrayTojson() {
    // 1.创建一个java对象
    TbUser userOne = new TbUser(1l, "zhangsan", "123", "13766669999", new Date());
    TbUser userTwo = new TbUser(2l, "lisi", "1234", "13766669999", new Date());
    List users = new ArrayList();
    users.add(userOne);
    users.add(userTwo);
    // 2.转换为jsonstr
    String jsonstr = JSON.toJSONString(users);
    System.out.println(jsonstr);
}

运行结果:

{"created":1597288890276,"id":1,"password":"123","phone":"13766669999","username":"zhangsan"}
---------------------------------------------------------------------------------------------
[{"created":1597289361351,"id":1,"password":"123","phone":"13766669999","username":"zhangsan"},{"created":1597289361351,"id":2,"password":"1234","phone":"13766669999","username":"lisi"}]

(2) JaveBean ➡ Json对象

JSONObject jsonObject = (JSONObject) JSON.toJSON(T t);
JSONArray jsonArray = (JSONArray) JSON.toJSON(T t);

// java对象数组转json对象
@Test
public void beanTojsonObject() {
    TbUser userOne = new TbUser(1l, "zhangsan", "123", "13766669999", new Date());
    JSONObject jsonObject = (JSONObject) JSON.toJSON(userOne);
    System.out.println(jsonObject);
}

// java对象数组转json对象
@Test
public void beanTojsonArray() {
    // 1.创建一个java对象
    TbUser userOne = new TbUser(1l, "zhangsan", "123", "13766669999", new Date());
    TbUser userTwo = new TbUser(2l, "lisi", "1234", "13766669999", new Date());
    List users = new ArrayList();
    users.add(userOne);
    users.add(userTwo);
    JSONArray jsonArray = (JSONArray) JSON.toJSON(users);
    System.out.println(jsonArray);
}

运行结果:

{"password":"123","phone":"13766669999","created":1597290327613,"id":1,"username":"zhangsan"}
---------------------------------------------------------------------------------------------
[{"password":"123","phone":"13766669999","created":1597290349668,"id":1,"username":"zhangsan"},{"password":"1234","phone":"13766669999","created":1597290349668,"id":2,"username":"lisi"}]

(3) JsonStr ➡ JaveBean

T t = JSON.parseObject(String jsonStr, Class clazz);
List t= JSON.parseArray(String jsonStr, Class clazz);

// json字符串转java对象
@Test
public void jsonStrtobean() {
    String jsonStr = "{\"password\":\"123\",\"phone\":\"13766669999\",\"created\":1597290327613,\"id\":1,\"username\":\"zhangsan\"}";
    TbUser user = JSON.parseObject(jsonStr, TbUser.class);
    System.out.println(user);
}

// json字符串转java对象数组
@Test
public void jsonStrtobeanArray() {
    String jsonStr = "[{\"password\":\"123\",\"phone\":\"13766669999\",\"created\":1597290349668,\"id\":1,\"username\":\"zhangsan\"},{\"password\":\"1234\",\"phone\":\"13766669999\",\"created\":1597290349668,\"id\":2,\"username\":\"lisi\"}]";
    List users = JSON.parseArray(jsonStr, TbUser.class);
    System.out.println(users);
}

运行结果:

TbUser{id=1, username='zhangsan', password='123', phone='13766669999', created=Thu Aug 13 11:45:27 CST 2020}
---------------------------------------------------------------------------------------------
[TbUser{id=1, username='zhangsan', password='123', phone='13766669999', created=Thu Aug 13 11:45:49 CST 2020}, TbUser{id=2, username='lisi', password='1234', phone='13766669999', created=Thu Aug 13 11:45:49 CST 2020}]

(4) JsonStr ➡ Json对象

JSONObject jsonObject = JSONObject.parseObject(jsonStr);
JSONArray jsonArray = JSONArray.parseArray(jsonStr);

// json字符串转json对象
@Test
public void jsonStrtojsonObject() {
    String jsonStr = "{\"password\":\"123\",\"phone\":\"13766669999\",\"created\":1597290327613,\"id\":1,\"username\":\"zhangsan\"}";
    JSONObject jsonObject = JSONObject.parseObject(jsonStr);
    System.out.println(jsonObject);
}

// json字符串转json对象数组
@Test
public void jsonStrtojsonArray() {
    String jsonStr = "[{\"password\":\"123\",\"phone\":\"13766669999\",\"created\":1597290349668,\"id\":1,\"username\":\"zhangsan\"},{\"password\":\"1234\",\"phone\":\"13766669999\",\"created\":1597290349668,\"id\":2,\"username\":\"lisi\"}]";
    JSONArray jsonArray = JSONArray.parseArray(jsonStr);
    System.out.println(jsonArray);
}

(5) Json对象 ➡ JavaBean

t = jsonObject.toJavaObject(Class clazz);
List t = jsonArray.toJavaList(Class clazz);

(6) Json对象 ➡ JavaStr

String jsonString = jsonObject.toJSONString();
String jsonString = jsonArray.toJSONString();

fastjson_transition_不全

参考内容地址:https://www.runoob.com/w3cnote/fastjson-intro.html

你可能感兴趣的:(FastJson)