简介
java的JSON序列化库。提供服务器和安卓端两种解析工具,表现性能较Gson和Jackson更好。
- toJSONString(object)将对象转换为JSON字符串
- parseobject(JSON)负责将JSON字符串转换为对象。
- 允许转换预先存在的无法修改的对象
- 支持反序列化
- 允许对象的自定义表示,允许自定义序列化类
- 支持任意复杂对象
配置和使用
安装和配置
MAVEN坐标:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${project.version}</version>
</dependency>
使用
快速开始
class test {
private List<Person> people = new LinkedList<Person>();
public void parseToJSON(){
people.add(new Person(15, "yichen", new Date());
people.add(new Person(20, "leitong", new Date());
String json = JSON.toJSONString(people);
System.out.print(json);
}
}
执行结果:
[
{
"AGE":15,
"DATE OF BIRTH":1468962431394,
"FULL NAME":"yichen"
},
{
"AGE":20,
"DATE OF BIRTH":1468962431394,
"FULL NAME":"leitong"
}
]
@JSONField 注解以及所有配置参数
可以作用于:
- Field
- Setter getter
本注解可以使用的配置参数:
package com.alibaba.fastjson.annotation;
public @interface JSONField {
// 配置序列化和反序列化的顺序,1.1.42版本之后才支持
int ordinal() default 0;
// 指定字段的名称
String name() default "";
// 指定字段的格式,对日期格式有用, 通常以这种格式:"ddMMyyyy" 来表示日、月、年,顺序可替换。
String format() default "";
// 是否序列化
boolean serialize() default true;
// 是否反序列化
boolean deserialize() default true;
}
BeanToArray()
fastjson还支持BeanToArray序列化功能:
String jsonOutput= JSON.toJSONString(people, SerializerFeature.BeanToArray);
System.out.print(jsonOutput);
执行结果为:
[
[
15,
1469003271063,
"yichen"
],
[
20,
1469003271063,
"leitong"
]
]
创建JSON对象
fastjson内置了两种JSON对象:
- JSONObject
- JSONArray
在讲解需要说明的是,fastjson是根据getter和setter方法进行json序列化的,因此必须提供相应的getter和setter以确保序列化正常进行。
JSONObject实际上是一个map,且扩展了更多的操作。而JSONArray实际上是一个list,他是一个对于JSONObject对象的集合。
例子:
@Test
public void whenGenerateJson_thanGenerationCorrect() throws ParseException {
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < 2; i++) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("AGE", 10);
jsonObject.put("FULL NAME", "Doe " + i);
jsonObject.put("DATE OF BIRTH", "2016/12/12 12:12:12");
jsonArray.add(jsonObject);
}
String jsonOutput = jsonArray.toJSONString();
}
输出:
[
{
"AGE":"10",
"DATE OF BIRTH":"2016/12/12 12:12:12",
"FULL NAME":"Doe 0"
},
{
"AGE":"10",
"DATE OF BIRTH":"2016/12/12 12:12:12",
"FULL NAME":"Doe 1"
}
]
JSON字符串转换为Java对象
接下来将对如何解析JSON进行说明。有如下代码:
@Test
public void jsonToObject(String json) {
Person person = JSON.parseObject(json, Person.class);
System.out.print(person);
}
注意:在反序列化时,javaBean必须要有默认无参构造函数,否则会报异常:
com.alibaba.fastjson.JSONException: default constructor not found.
JSON.parseObject方法提供将JSON转为Java object的操作,但是他需要一个.class类作为一个参数以供甄别具体要转换到什么类型。
接下来做简单验证:
"Person [age=20, fullName=John Doe, dateOfBirth=Wed Jul 20 08:51:12 WEST 2016]"
则对以上代码的执行结果为:
person: age=20, fullName=John Doe, dateOfBirth=null