365net

FastJson详解

📅 2026-01-03 09:22:31 👤 admin 👁️ 6023 🏷️ 117

一、FastJson介绍 FastJson 是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将JavaBean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

Fastjson 的优点

速度快 fastjson相对其他JSON库的特点是快从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越使用广泛 fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受在2012年被开源中国评选为最受欢迎的国产开源软件之一测试完备 fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个每次发布都会进行回归测试,保证质量稳定使用简单 fastjson的API十分简洁功能完备 支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展 引入依赖

代码语言:javascript复制

com.alibaba

fastjson

1.2.79

二、FastJson序列化API 序列化 : 是指将Java对象转成json格式字符串的过程。JavaBean对象、List集合对象、Map集合为应用最广泛的。

1、序列化Java对象代码语言:javascript复制@Test

public void objectToJson(){

Student student = new Student();

student.setId(1);

student.setName("张三");

student.setAge(20);

student.setAddress("北京市");

String jsonString = JSON.toJSONString(student);

System.out.println(jsonString);

}

结果:

{"address":"北京市","age":20,"id":1,"name":"张三"}2、序列化List集合代码语言:javascript复制@Test

public void listToJson(){

Student student = new Student();

student.setId(1);

student.setName("张三");

student.setAge(20);

student.setAddress("北京市");

Student student2 = new Student();

student2.setId(2);

student2.setName("李四");

student2.setAge(22);

student2.setAddress("天津市");

List list = new ArrayList<>();

list.add(student);

list.add(student2);

String jsonString = JSON.toJSONString(list);

System.out.println(jsonString);

}

结果:

[{"address":"北京市","age":20,"id":1,"name":"张三"},{"address":"天津市","age":22,"id":2,"name":"李四"}]3、序列化Map集合代码语言:javascript复制@Test

public void mapToJson(){

Student student = new Student();

student.setId(1);

student.setName("张三");

student.setAge(20);

student.setAddress("北京市");

Student student2 = new Student();

student2.setId(2);

student2.setName("李四");

student2.setAge(22);

student2.setAddress("天津市");

Map map = new HashMap<>();

map.put("s1",student);

map.put("s2",student2);

String jsonString = JSON.toJSONString(map);

System.out.println(jsonString);

}

结果:

{"s1":{"address":"北京市","age":20,"id":1,"name":"张三"},"s2":{"address":"天津市","age":22,"id":2,"name":"李四"}}三、FashJson反序列化API1、反序列化Java对象代码语言:javascript复制@Test

public void jsonToObject(){

String jsonString = "{\"address\":\"北京市\",\"age\":20,\"id\":1,\"name\":\"张三\"}";

Student student = JSON.parseObject(jsonString, Student.class);

System.out.println(student);

}

结果:

Student(id=1, name=张三, age=20, address=北京市)2、反序列化List集合代码语言:javascript复制@Test

public void jsonToList(){

String jsonString = "[{\"address\":\"北京市\",\"age\":20,\"id\":1,\"name\":\"张三\"},{\"address\":\"天津市\",\"age\":22,\"id\":2,\"name\":\"李四\"}]";

List list = JSON.parseArray(jsonString,Student.class);

for (int i = 0; i < list.size(); i++) {

Student student = list.get(i);

System.out.println(student);

}

}

结果:

Student(id=1, name=张三, age=20, address=北京市)

Student(id=2, name=李四, age=22, address=天津市)3、反序列化Map集合(带泛型)new TypeReference(){} TypeReference构造方法是protected,不可直接访问(不是子类,也不再同一个包下)new 对象(){} 是匿名内部类,TypeReference的子类,new的是子类而非TypeReference代码语言:javascript复制@Test

public void jsonToMap(){

String jsonString = "{\"s1\":{\"address\":\"北京市\",\"age\":20,\"id\":1,\"name\":\"张三\"},\"s2\":{\"address\":\"天津市\",\"age\":22,\"id\":2,\"name\":\"李四\"}}";

Map parse = JSON.parseObject(jsonString,new TypeReference>(){});

for(String s : parse.keySet()){

System.out.println(s + ":::"+parse.get(s));

}

}

结果:

s1:::Student(id=1, name=张三, age=20, address=北京市)

s2:::Student(id=2, name=李四, age=22, address=天津市)四、SerializerFeature枚举1、默认字段为null的不显示代码语言:javascript复制@Test

public void testDefault(){

Student student = new Student();

student.setId(1);

student.setName(null);

student.setAge(20);

//student.setAddress("北京市");

student.setDate(new Date());

String jsonString = JSON.toJSONString(student);

System.out.println(jsonString);

}

结果:

{"age":20,"date":1684245428959,"id":1}枚举常量WriteMapNullValue序列化为null的字段代码语言:javascript复制@Test

public void testSerializerFeature(){

Student student = new Student();

student.setId(1);

student.setName(null);

student.setAge(20);

//student.setAddress("北京市");

String jsonString = JSON.toJSONString(student, SerializerFeature.WriteMapNullValue);

System.out.println(jsonString);

}

结果:

{"address":null,"age":20,"id":1,"name":null}枚举常量WriteNullStringAsEmpty字段为null,序列化为""代码语言:javascript复制@Test

public void testSerializerFeature(){

Student student = new Student();

student.setId(1);

student.setName(null);

student.setAge(20);

//student.setAddress("北京市");

String jsonString = JSON.toJSONString(student, SerializerFeature.WriteMapNullValue);

System.out.println(jsonString);

}

结果:

{"address":"","age":20,"id":1,"name":""}枚举常量WriteNullNumberAsZero字段为null,序列化为0枚举常量WriteNullBooleanAsFalse字段值为null,输出false2、格式化枚举常量PrettyFormat格式化输出(为了好看)枚举常量WriteDateUseDateFormat格式化日期格式代码语言:javascript复制@Test

public void testSerializerFeature() {

Student student = new Student();

student.setId(1);

student.setName("张三");

student.setAge(20);

student.setDate(new Date());

String jsonString = JSON.toJSONString(student,

SerializerFeature.WriteDateUseDateFormat,

SerializerFeature.PrettyFormat);

System.out.println(jsonString);

}

结果:

{

"age":20,

"date":"2023-05-16 21:54:20",

"id":1,

"name":"张三"

}五、@JSonField注解 该注解作用于方法上、字段上和参数上。可在序列化和反序列化时进行特性功能定制。

注解属性 : name序列化后的名字注解属性 : ordinal序列化后的顺序注解属性 : format序列化后的格式注解属性 : serialize是否序列化该字段注解属性 : deserialize是否反序列化该字段注解属性 : serialzeFeatures 序列化时的特性定义代码语言:javascript复制@Data

public class Student {

@JSONField(ordinal = 2)

private Integer id;

@JSONField(name = "studentName")

private String name;

@JSONField(ordinal = 1)

private Integer age;

@JSONField(serialize = false)

private String address;

@JSONField(format = "YYYY-MM-dd")

private Date date;

}代码语言:javascript复制@Test

public void test1() {

Student student = new Student();

student.setId(1);

student.setName("张三");

student.setAge(20);

student.setAddress("北京市");

student.setDate(new Date());

String jsonString = JSON.toJSONString(student);

System.out.println(jsonString);

}

结果:

{"date":"2023-05-16","studentName":"张三","age":20,"id":1}六、@ JSonType注解 该注解作用于类上,对该类的字段进行序列化和反序列化时的特性功能定制。

注解属性 : includes要被序列化的字段注解属性 : orders序列化后的顺序注解属性 : serialzeFeatures序列化时的特性定义

相关推荐

500年深海沉船,揭开怎样的古代世界?

500年深海沉船,揭开怎样的古代世界? 追寻古代世界的考古学,是一个内在十分浪漫的学科,而深海考古,连外在都很浪漫。 得益于深海载人

《浣溪沙·游蕲水清泉寺》译文及注释

译文游玩蕲水的清泉寺,寺庙在兰溪的旁边,溪水向西流淌。山脚下刚生长出来的幼芽浸泡在溪水中,松林间的沙路被雨水冲洗的一尘不染,傍

面试官:集合使用时应该注意哪些问题?我:应该注意该注意的问题!

写在开头面试官:“小伙子,java的集合学过吗?” 我:“肯定学过呀!”,这时候的我自信满满,手撕集合八股文嘛,早已背的滚瓜烂熟了呀