Fastjson 简明教程

介绍

Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。

教程

maven依赖

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

API使用

涉及到User和Address两个类,分别如下:
User

class User{
    private int id;
    private String name;
    private int age;
    private List<Address> addrList;

    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 int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public List<Address> getAddrList() {
        return addrList;
    }
    public void setAddrList(List<Address> addrList) {
        this.addrList = addrList;
    }

}

Address


class Address{
    private String province;
    private String city;
    private String district;
    private String detail;
    public String getProvince() {
        return province;
    }
    public void setProvince(String province) {
        this.province = province;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getDistrict() {
        return district;
    }
    public void setDistrict(String district) {
        this.district = district;
    }
    public String getDetail() {
        return detail;
    }
    public void setDetail(String detail) {
        this.detail = detail;
    }

}
1、序列化

主要通过 JSON.toJSONString方法将Bean转换为json。

String com.alibaba.fastjson.JSON.toJSONString(Object object) 
User user = new User();
        user.setId(1);
        user.setName("ricky");
        user.setAge(27);

        List<Address> addrList = new ArrayList<>();
        Address addr1 = new Address();
        addr1.setProvince("北京");
        addr1.setCity("北京市");
        addr1.setDistrict("朝阳区");
        addr1.setDetail("大望路金地中心");
        addrList.add(addr1);

        Address addr2 = new Address();
        addr2.setProvince("湖北省");
        addr2.setCity("武汉市");
        addr2.setDistrict("武昌区");
        addr2.setDetail("江汉路步行街");
        addrList.add(addr2);

        user.setAddrList(addrList);

        System.out.println(user);

        String jsonStr = JSON.toJSONString(user);

        System.out.println(jsonStr);

结果如下:
{“addrList”:[{“city”:”北京市”,”detail”:”大望路金地中心”,”district”:”朝阳区”,”province”:”北京”},{“city”:”武汉市”,”detail”:”江汉路步行街”,”district”:”武昌区”,”province”:”湖北省”}],”age”:27,”id”:1,”name”:”ricky”}

2、反序列化

主要通过JSON.parseObject方法将json转换为Bean对象,如下:

<T> T com.alibaba.fastjson.JSON.parseObject(String text, Class<T> clazz) 
String jsonStr = "...";
User user = JSON.parseObject(jsonStr, User.class);
System.out.println(user);
3、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.1 指定序列化名称

指定User的addrList属性在序列化时变成addr_list,如下:

class User{
    private int id;
    private String name;
    private int age;

    @JSONField(name="addr_list")
    private List<Address> addrList;

    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 int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public List<Address> getAddrList() {
        return addrList;
    }
    public void setAddrList(List<Address> addrList) {
        this.addrList = addrList;
    }

}

结果:
{“addr_list”:[{“city”:”北京市”,”detail”:”大望路金地中心”,”district”:”朝阳区”,”province”:”北京”},{“city”:”武汉市”,”detail”:”江汉路步行街”,”district”:”武昌区”,”province”:”湖北省”}],”age”:27,”id”:1,”name”:”ricky”}

3.2 使用serialize/deserialize指定字段不序列化

控制age属性不序列化,如下:

class User{
    private int id;
    private String name;
    @JSONField(serialize=false)
    private int age;

    @JSONField(name="addr_list")
    private List<Address> addrList;

    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 int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public List<Address> getAddrList() {
        return addrList;
    }
    public void setAddrList(List<Address> addrList) {
        this.addrList = addrList;
    }

}

结果:
{“addr_list”:[{“city”:”北京市”,”detail”:”大望路金地中心”,”district”:”朝阳区”,”province”:”北京”},{“city”:”武汉市”,”detail”:”江汉路步行街”,”district”:”武昌区”,”province”:”湖北省”}],”id”:1,”name”:”ricky”}

3.3 使用ordinal指定字段的顺序

class User{
    @JSONField(ordinal = 1)
    private int id;
    @JSONField(ordinal = 2)
    private String name;
    @JSONField(ordinal = 3)
    private int age;

    @JSONField(name="addr_list", ordinal=4)
    private List<Address> addrList;

    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 int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public List<Address> getAddrList() {
        return addrList;
    }
    public void setAddrList(List<Address> addrList) {
        this.addrList = addrList;
    }

}

结果:
{“id”:1,”name”:”ricky”,”age”:27,”addr_list”:[{“city”:”北京市”,”detail”:”大望路金地中心”,”district”:”朝阳区”,”province”:”北京”},{“city”:”武汉市”,”detail”:”江汉路步行街”,”district”:”武昌区”,”province”:”湖北省”}]}

参考资料:
https://github.com/alibaba/fastjson/wiki/JSONField

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值