介绍
Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。
教程
maven依赖
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.47</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”:”湖北省”}]}