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类型对象。

标签列表