fastjson对象转json(fastjson对象转json字符串)
简介:
Fastjson是一个高性能的Java JSON库,可用于将Java对象转换为JSON格式和将JSON格式转换为Java对象。本文将介绍Fastjson对象转JSON的基本用法。
多级标题:
一、Fastjson简介
二、Fastjson对象转JSON基本用法
1. 创建一个Java对象
2. 将Java对象转换为JSON格式
3. JSON格式字符串转JSONObject对象
4. JSONObject对象转JSON格式字符串
5. 将Java对象转换为JSON格式字符串
三、Fastjson属性定制化
1. 空值的处理
2. 自定义属性的名称
3. 过滤不需要的属性
4. 序列化和反序列化
内容详细说明:
一、Fastjson简介
Fastjson是阿里巴巴公司开发的一个高性能的Java JSON库,具有兼容性好,使用方便等特点。其主要用于将Java对象转换成JSON字符串,也可以将JSON字符串转换成Java对象。
二、Fastjson对象转JSON基本用法
1. 创建一个Java对象
在使用Fastjson的时候,首先需要创建一个Java对象,如下:
```
public class Student {
private String name;
private int age;
private String address;
//Getter和Setter方法省略
```
2. 将Java对象转换为JSON格式
使用fastjson的JSONObject类,可以将Java对象转换为JSON格式,如下:
```
Student student = new Student();
student.setName("张三");
student.setAge(18);
student.setAddress("上海市");
JSONObject jsonObject = (JSONObject) JSON.toJSON(student);
System.out.println(jsonObject.toString());
```
将输出如下JSON格式字符串:
```
{"address":"上海市","age":18,"name":"张三"}
```
3. JSON格式字符串转JSONObject对象
使用fastjson的JSONObject类,可以将JSON格式字符串转换为JSONObject对象,如下:
```
String jsonString = "{\"address\":\"上海市\",\"age\":18,\"name\":\"张三\"}";
JSONObject jsonObject = JSONObject.parseObject(jsonString);
System.out.println(jsonObject.toJSONString());
```
将输出与上一步相同的JSON格式字符串。
4. JSONObject对象转JSON格式字符串
使用fastjson的JSONObject类,可以将JSONObject对象转换为JSON格式字符串,如下:
```
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "张三");
jsonObject.put("age", 18);
jsonObject.put("address", "上海市");
String jsonString = jsonObject.toJSONString();
System.out.println(jsonString);
```
将输出如下JSON格式字符串:
```
{"address":"上海市","age":18,"name":"张三"}
```
5. 将Java对象转换为JSON格式字符串
除了使用JSONObject类将Java对象转换为JSON格式字符串外,还可以使用fastjson的JSON类进行转换,如下:
```
Student student = new Student();
student.setName("张三");
student.setAge(18);
student.setAddress("上海市");
String jsonString = JSON.toJSONString(student);
System.out.println(jsonString);
```
将输出与第2步相同的JSON格式字符串。
三、Fastjson属性定制化
1. 空值的处理
在默认情况下,如果Java对象中有一些属性的值为null,则在将对象转换为JSON格式字符串时该属性不会被转化。如果需要将null属性转化为"null"字符串,可以使用SerializerFeature.WriteMapNullValue特性,如下:
```
Student student = new Student();
student.setName("张三");
student.setAge(18);
JSONObject jsonObject = (JSONObject) JSON.toJSON(student);
jsonObject.put("address", null);
String jsonString = JSON.toJSONString(jsonObject, SerializerFeature.WriteMapNullValue);
System.out.println(jsonString);
```
将输出如下JSON格式字符串:
```
{"address":null,"age":18,"name":"张三"}
```
2. 自定义属性的名称
如果需要将Java对象的属性名对应的JSON格式字符串中的名称进行定制化,可以使用@JSONField注解,如下:
```
public class Student {
@JSONField(name = "student_name")
private String name;
private int age;
private String address;
//Getter和Setter方法省略
```
此时将输出如下JSON格式字符串:
```
{"student_name":"张三","age":18,"address":"上海市"}
```
3. 过滤不需要的属性
在将Java对象转换成JSON格式字符串的过程中,如果需要过滤不需要的属性,可以使用SerializerFeature.DisableCircularReferenceDetect特性,如下:
```
public class Student {
private String name;
private int age;
@JSONField(serialize = false)
private String address;
//Getter和Setter方法省略
Student student = new Student();
student.setName("张三");
student.setAge(18);
student.setAddress("上海市");
String jsonString = JSON.toJSONString(student, SerializerFeature.DisableCircularReferenceDetect);
System.out.println(jsonString);
```
将输出不包含address属性的JSON格式字符串:
```
{"age":18,"name":"张三"}
```
4. 序列化和反序列化
在使用Fastjson进行对象转换时,还可以自定义实现序列化和反序列化,如下:
```
public class DateSerializer implements ObjectSerializer {
@Override
public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features)
throws IOException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String text = sdf.format((Date) object);
serializer.write(text);
}
public class DateDeserializer implements ObjectDeserializer {
@Override
public Date deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
String dateString = parser.getLexer().stringVal();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date = null;
try {
date = sdf.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
@Override
public int getFastMatchToken() {
return JSONToken.LITERAL_STRING;
}
public class Student {
private String name;
private int age;
private Date birthday;
//Getter和Setter方法省略
Student student = new Student();
student.setName("张三");
student.setAge(18);
student.setBirthday(new Date());
String jsonString = JSON.toJSONString(student, new DateSerializer());
System.out.println(jsonString);
Student student1 = JSON.parseObject(jsonString, Student.class, new DateDeserializer());
System.out.println(student1.getBirthday());
```
将输出如下JSON格式字符串:
```
{"age":18,"birthday":"2022-01-10","name":"张三"}
```
并且将输出与student对象的birthday属性相同的Date类型对象。