全解史上最快的JSON解析库 - alibaba Fastjson
Java常用的几个Json库,性能强势对比!
基本的序列化与反序列化
public class Student {
private Long id;
private String name;
//setter and getter
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
public class MainTest {
public static void main(String[] args) {
Student stud = new Student();
stud.setId(3L);
stud.setName("root");
// 转换为 JSON
String jsonString = JSON.toJSONString(stud);
System.out.println("JSON字符串:" + jsonString);
// 转换为 对象BEAN
Student grade = JSON.parseObject(jsonString, Student.class);
System.out.println("JavaBean对象:" + grade);
}
}
JSON字符串:{"id":3,"name":"root"}
JavaBean对象:Student{id=3, name='root'}
将对象中的空值输出:
WriteNullListAsEmpty集合:[]
WriteNullStringAsEmpty空字符串:""
WriteNullNumberAsZero数字:0
WriteNullBooleanAsFalse布尔型:false
String text = JSON.toJSONString(obj, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullListAsEmpty);
Fastjson 定制序列化
1、JSONField
作用与属性或方法
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface JSONField {
//序列化的顺序
int ordinal() default 0;
// 序列化的名称
String name() default "";
//主要用于日期格式
String format() default "";
// 是否序列化
boolean serialize() default true;
// 是否反序列化
boolean deserialize() default true;
.....
}
示例:
public class Vo{
//按顺序序列化
@JSONField(ordinal = 3)
private int f0;
@JSONField(ordinal = 2)
private int f1;
@JSONField(ordinal = 1)
private int f2;
// 配置在属性上
@JSONField(name="ID")
private int id;
@JSONField(name="birthday",format="yyyy-MM-dd")
private Date date;
@JSONField(serialize=false)
public String sex;
@JSONField(deserialize=false)
public int age;
// 配置在方法上
private String name;
@JSONField(name="Name")
public String getName() {
return name;
}
@JSONField(name="Name")
public void setName(String name) {
this.name = name;
}
}
2、SerializeFilter序列化
3、 ParseProcess反序列化
使用场景
在 Spring MVC 中集成 Fastjson
在 Spring Data Redis 中集成 Fastjson
其他
3个JSON类库分别为:Gson,Jackson,Json-lib