FastJson

本文围绕Fastjson展开,介绍了使用SerializerFeature枚举进行序列化时的个性化定制,如将null序列化出来、序列化为空字符串等。还说明了直接操作步骤,包括引入依赖包、创建对象、进行序列化和反序列化。此外,对相关注解的作用进行了解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转换

//JSON
//将JSON格式对象转换成为字符串
String str = JSON.toJSONString(Object);

//JSON格式List<Object> 转字符串
List list = new ArrayList();
String str = JSON.toJSONString(list);

//JSON格式Map转字符串
Map map = new HashMap();
String str = JSON.toJSONString(map);
===================================================
上面方法可以用下面方法替代
//JSONObject
JSONObject.toJSONString(Object/list/map)
//JSON格式字符串转Object
String str=""
JSONObject jsonObject = JSON.parseObject(str);
或者
Person person = JSON.parseObject(str, Person.class);

//JSON格式字符串转List
List<Person> people = JSON.parseArray("", Person.class);

//JSON格式字符串转Map
Map<String,Person> map = JSON.parseObject("", new TypeReference<Map<String, Person>>() {});

======================================================
//JSON格式字符串str转Object
JSONObject jsonObject = JSONObject.parseObject(str);

// 将Object 转JSONObject
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(obj);
 
//获取JSON数组
 JSONObject result = ......;
 JSONArray datas = result.getJSONArray("...");

//获取JSON对象
 JSONObject result = ......;
 JSONArray datas = result.getJSONObject("...");

SerializerFeature枚举就行序列化时个性化定制

SerializerFeature.WriteMapNullValue 将null序列化出来
SerializerFeature.WriteNullStringAsEmpty 将null序列化为""
SerializerFeature.WriteNullNumberAsZero 数值字段如果为null,输出为0,而非null

直接操作

1.引入fastjson依赖包

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.79</version>
        </dependency>

2.创建对象(对象上的注解先不用管后面解释)

@JSONType(includes = {"id","name","address","date","flag"})
public class Student {
    @JSONField(name = "id1")
    private int id;
    private String name;
    private String address;
    private Date  date;
    private boolean flag;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String adddress) {
        this.address = adddress;
    }
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }
    public boolean isFlag() {
        return flag;
    }
    public void setFlag(boolean flag) {
        this.flag = flag;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", adddress='" + address + '\'' +
                ", date=" + date +
                ", flag=" + flag +
                '}';
    }
}

3.序列号(将对象转化成json字符串)和反序列化代码(将json字符串转化成对象)

        //对象转化为json字符串
        Student student = new Student();
        student.setId(1);
        student.setName("tmm");
        student.setDate(new Date());
        student.setFlag(false);
        String s = JSON.toJSONString(student,SerializerFeature.WriteMapNullValue);
        System.out.println(s);

结果:

{"address":null,"date":1648726711219,"flag":false,"id":1,"name":"tmm"}

SerializerFeature属性百度查看,WriteMapNullValue 是否输出值为null的字段,默认为false,这样null值就会被序列号出来

        Student student2 = new Student();
        student2.setId(2);
        student2.setName("jyq");
        student2.setDate(new Date());
        student2.setFlag(true);
        student2.setAddress("world");
        //map转化为json字符串
        Map<String,Student> map = new HashMap<String, Student>();
        map.put("1",student);
        map.put("2",student2);
        String s1 = JSON.toJSONString(map);
        System.out.println(s1);

结果:

{"1":{"date":1648727246049,"flag":false,"id":1,"name":"tmm"},"2":{"address":"world","date":1648727246154,"flag":true,"id":2,"name":"jyq"}}
       //list转化为json字符串
        List<Student> list = new ArrayList<Student>();
        list.add(student);
        list.add(student2);
        String s2 = JSON.toJSONString(list);
        System.out.println(s2);

结果:

[{"date":1648727317834,"flag":false,"id":1,"name":"tmm"},{"address":"world","date":1648727317931,"flag":true,"id":2,"name":"jyq"}]
       //将json字符串转化成对象
        String ss = "{\"date\":1648724323890,\"flag\":false,\"id\":1,\"name\":\"tmm\"}";
        Student student1 = JSON.parseObject(ss, Student.class);
        System.out.println(student1);

结果:

Student{id=1, name='tmm', adddress='null', date=Thu Mar 31 18:58:43 CST 2022, flag=false}
        //将json字符串转化成list集合
        String ss1 = "[{\"date\":1648724537601,\"flag\":false,\"id\":1,\"name\":\"tmm\"},{\"adddress\":\"world\",\"date\":1648724537700,\"flag\":true,\"id\":2,\"name\":\"jyq\"}]";
        List<Student> student12 = JSON.parseArray(ss1, Student.class);
        for (Student student3 : student12) {
            System.out.println(student3);
        }

结果:

Student{id=1, name='tmm', adddress='null', date=Thu Mar 31 19:02:17 CST 2022, flag=false}
Student{id=2, name='jyq', adddress='null', date=Thu Mar 31 19:02:17 CST 2022, flag=true}
        //将json字符串转化成map集合
        String ss3 = "{\"1\":{\"date\":1648724699626,\"flag\":false,\"id\":1,\"name\":\"tmm\"},\"2\":{\"adddress\":\"world\",\"date\":1648724699721,\"flag\":true,\"id\":2,\"name\":\"jyq\"}}";
        Map<String,Student> map1 = JSON.parseObject(ss3, new TypeReference<Map<String,Student>>(){});
        for (String key: map1.keySet()) {
            System.out.println(key+"::"+map1.get(key));
        }

结果:

1::Student{id=1, name='tmm', adddress='null', date=Thu Mar 31 19:04:59 CST 2022, flag=false}
2::Student{id=2, name='jyq', adddress='null', date=Thu Mar 31 19:04:59 CST 2022, flag=true}

注解理解:

@JSONType(includes = {"id","name","address","date","flag"})
public class Student {
    @JSONField(name = "id1")
    private int id;
    private String name;
    private String address;
    private Date  date;
    ......

@JSONField中:
修改和json字符串的字段映射【name】
格式化数据【format】
过滤掉不需要序列化的字段【serialize】
@JSONType中:
orders() //字段序列化顺序
includes() //包含的序列化字段
ignores() //不包含的序列化字段

Student{id=2, name=‘jyq’, adddress=‘null’, date=Thu Mar 31 19:02:17 CST 2022, flag=true} 这样的格式是对象

{“1”:{“date”:1648727246049,“flag”:false,“id”:1,“name”:“tmm”},“2”:{“address”:“world”,“date”:1648727246154,“flag”:true,“id”:2,“name”:“jyq”}}
这样的是json格式对象或者字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值