在前后端数据传输交互中,经常会遇到字符串(String)与json,XML等格式相互转换与解析,其中json以跨语言,跨前后端的优点在开发中被频繁使用,基本上可以说是标准的数据交换格式。fastjson 是一个java语言编写的高性能且功能完善的JSON库,它采用一种“假定有序快速匹配”的算法,把JSON Parse 的性能提升到了极致。它的接口简单易用,已经被广泛使用在缓存序列化,协议交互,Web输出等各种应用场景中。
1 引入Fastjson依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
2 基本使用
java对象转json
@Test
public void testObj2Json(){
Student student = new Student();
student.setId(1);
student.setName("八点博客");
student.setAge(10);
student.setEmail("badianboke@163.com");
student.setBirthday(getDate());
String res = JSON.toJSONString(student);
System.out.println(res);
}
public Date getDate(){
return new Date();
}
如图
List集合转json
Student student = new Student();
student.setId(1);
student.setName("八点博客");
student.setAge(10);
student.setEmail("badianboke@163.com");
student.setBirthday(getDate());
Student student2 = new Student();
student2.setId(2);
student2.setName("八点博客2");
student2.setAge(10);
student2.setEmail("badianboke@qq.com");
student2.setBirthday(getDate());
List<Student> list = new ArrayList<>();
list.add(student);
list.add(student2);
String res = JSON.toJSONString(list);
System.out.println(res);
如图
Map集合转json
Student student = new Student();
student.setId(1);
student.setName("八点博客");
student.setAge(10);
student.setEmail("badianboke@163.com");
student.setBirthday(getDate());
Student student2 = new Student();
student2.setId(2);
student2.setName("八点博客2");
student2.setAge(10);
student2.setEmail("badianboke@qq.com");
student2.setBirthday(getDate());
Map<String, Student> map = new HashMap();
map.put("student1", student);
map.put("student2", student2);
String res = JSON.toJSONString(list);
System.out.println(res);
如图
JSON字符串转对象
public void testJson2Obj(){
String string = "{\"age\":10,\"birthday\":1670984338994,\"email\":\"badianboke@qq.com\",\"id\":2,\"name\":\"八点博客2\"}";
Student student = JSON.parseObject(string, Student.class);
System.out.println(student);
}
JSON字符串转List集合
public void testJson2List(){
String string = "[{\"age\":10,\"birthday\":1670984670117,\"email\":\"badianboke@qq.com\",\"id\":2,\"name\":\"八点博客2\"},{\"age\":10,\"birthday\":1670984670117,\"email\":\"badianboke@163.com\",\"id\":1,\"name\":\"八点博客\"}]";
List list = JSON.parseArray(string, Student.class);
System.out.println(list);
}
JSON字符串转Map集合
public void testJson2Map(){
String string = "{\"student2\":{\"age\":10,\"birthday\":1670984842339,\"email\":\"badianboke@qq.com\",\"id\":2,\"name\":\"八点博客2\"},\"student1\":{\"age\":10,\"birthday\":1670984842339,\"email\":\"badianboke@163.com\",\"id\":1,\"name\":\"八点博客\"}}";
Map<String, Student> map = JSON.parseObject(string, new TypeReference<Map<String, Student>>(){});
for (String key : map.keySet()){
System.out.println(map.get(key));
}
}
3 枚举
public void testEnum(){
Student student = new Student();
student.setId(1);
student.setName("八点博客");
//student.setAge(10);
// student.setEmail("badianboke@163.com");
student.setBirthday(getDate());
String res = JSON.toJSONString(student,
SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.WriteNullNumberAsZero,
SerializerFeature.WriteNullBooleanAsFalse,
SerializerFeature.WriteDateUseDateFormat,
SerializerFeature.PrettyFormat);
System.out.println(res);
}
如图
4 JSONField注解
public class Student {
private Integer id;
@JSONField(name = "s_name", ordinal = 1)
private String name;
@JSONField(name = "s_age", ordinal = 2)
private Integer age;
@JSONField(serialize = false, deserialize = false)
private String email;
@JSONField(format = "YYYY/MM/dd")
private Date birthday;
private boolean flag;
}
如图
4 JSONType注解
@JSONType(includes = {"id", "name"}, orders = {"name", "age"})
public class Student {
private Integer id;
private String name;
private Integer age;
private String email;
private Date birthday;
private boolean flag;
}