fastjson简单使用

154 阅读2分钟

一、准备工作

import lombok.Data;

@Data
public class User {

    private Long   id;
    private String name;

}
import lombok.Data;

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

@Data
public class Group {

    private Long id;
    private String name;
    private List<User> users = new ArrayList<User>();
    public void addUser(User user) {
        users.add(user);
    }

}

二、基础用法

1.对象->json

import com.alibaba.fastjson.JSON;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;


@SpringBootTest
public class FastJsonTest {
    
    @Test
    void testConvertObject2Json() {
       
        Group group = new Group();
        group.setId(1L);
        group.setName("admin");

        User guestUser = new User();
        guestUser.setId(1L);
        guestUser.setName("guest");

        User rootUser = new User();
        rootUser.setId(2L);
        rootUser.setName("root");

        group.addUser(guestUser);
        group.addUser(rootUser);

        String jsonString = JSON.toJSONString(group);

        System.out.println(jsonString);
    }
}

输出

{"id":1,"name":"admin","users":[{"id":1,"name":"guest"},{"id":2,"name":"root"}]}

2.测试json->对象

package com.example.file.process;

import com.alibaba.fastjson.JSON;
import com.example.file.process.pojo.vo.Group;
import com.example.file.process.pojo.vo.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class FastJsonTest2 {
    @Test
    void testConvertJson2Object() {
        String json="{"id":1,"name":"admin","users":[{"id":1,"name":"guest"},{"id":2,"name":"root"}]}";
        Group group = JSON.parseObject(json, Group.class);
    }



}

三、解析List

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.example.file.process.pojo.vo.Group;
import com.example.file.process.pojo.vo.User;
import com.example.file.process.pojo.vo.WarehouseVO;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class FastJsonTest {

    @Test
    void testGenericityTransfer(){
        String json="[{"id":1,"name":"admin","users":[{"id":1,"name":"guest"},{"id":2,"name":"root"}]},{"id":2,"name":"admin","users":[{"id":3,"name":"guest"},{"id":4,"name":"root"}]}]";
        
        List<Group> groups = JSON.parseObject(json, new TypeReference<List<Group>>() {
        });
    }

}

四、序列化/反序列化config

fastjson 1.2.57后版本,会识别下划线后缀的名字,比如"id_",如果需要精确匹配使用Feature.DisableFieldSmartMatch。 比如:VO3 vo = JSON.parseObject(text, VO3.class, Feature.DisableFieldSmartMatch); 经测试, 智能匹配可匹配以下集中类型:

  • CamelCase,eg:userName
  • PascalCase,eg:UserName
  • SnakeCase,eg:user_name
  • KebabCase,eg:user-name

对User做一些简单改动,增加字段mobilePhone

import lombok.Data;

@Data
public class User {

    private Long   id;
    
    private String name;
    private String mobilePhone;// 增加字段


}

1)代码方式配置序列化/反序列化config

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.example.file.process.pojo.vo.Group;
import com.example.file.process.pojo.vo.User;
import com.example.file.process.pojo.vo.WarehouseVO;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class FastJsonTest {

// 这里演示下序列化配置
// 反序列化
// ParserConfig parserConfig = new ParserConfig(false); // singleton
// parserConfig.propertyNamingStrategy = PropertyNamingStrategy.KebabCase;
// String json=...;
// Group group = JSON.parseObject(text, Group.class, parserConfig);
@Test
void testConfigNamingStrategy() {
    SerializeConfig serializeConfig = new SerializeConfig(false); // singleton,需要设置为单例,否则会有性能问题
    serializeConfig.propertyNamingStrategy = PropertyNamingStrategy.KebabCase;
    Group group = new Group();
    group.setId(1L);
    group.setName("admin");

    User guestUser = new User();
    guestUser.setId(1L);
    guestUser.setName("guest");
    guestUser.setMobilePhone("15380925806");

    User rootUser = new User();
    rootUser.setId(2L);
    rootUser.setName("root");
    rootUser.setMobilePhone("13162388512");


    group.addUser(guestUser);
    group.addUser(rootUser);

    String json = JSON.toJSONString(group,serializeConfig);
}

}

输出

{"id":1,"name":"admin","users":[{"id":1,"mobile-phone":"15380925806","name":"guest"},{"id":2,"mobile-phone":"13162388512","name":"root"}]}

2)注解实现序列化/反序列化config


import com.alibaba.fastjson.PropertyNamingStrategy;
import com.alibaba.fastjson.annotation.JSONType;
import lombok.Data;

@Data
@JSONType(naming = PropertyNamingStrategy.SnakeCase)// 指定序列化/反序列化命名
public class User {

    private Long id;
    private String name;
    private String mobilePhone;

}

输出

{"id":1,"name":"admin","users":[{"id":1,"mobile_phone":"15380925806","name":"guest"},{"id":2,"mobile_phone":"13162388512","name":"root"}]}

五、注解配置序列化/反序列化config

对User做一些简单改动

import lombok.Data;

@Data
public class User {

    private Long   id;
    // JSONFiel注解配置映射的json字段名称
    @JSONField(name = "userName")
    private String name;

}
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.example.file.process.pojo.vo.Group;
import com.example.file.process.pojo.vo.User;
import com.example.file.process.pojo.vo.WarehouseVO;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
public class FastJsonTest {

    @Test
    void testJSONFieldAnnotation(){

            Group group = new Group();
            group.setId(1L);
            group.setName("admin");

            User guestUser = new User();
            guestUser.setId(1L);
            guestUser.setName("guest");

            User rootUser = new User();
            rootUser.setId(2L);
            rootUser.setName("root");

            group.addUser(guestUser);
            group.addUser(rootUser);

            String jsonString = JSON.toJSONString(group);

            System.out.println(jsonString);
    }

}

输出

{"id":1,"name":"admin","users":[{"id":1,"userName":"guest"},{"id":2,"userName":"root"}]}