当我们调用 JSONObject.toJSONString(obj) 方法时,如果 obj 对象中存在 null 值的属性,那么转换成 JSON 字符串时就会出现问题,最终输出 null 值或抛出异常。下面我们来详细讲解如何解决此问题,以下是完整攻略:
当我们调用 JSONObject.toJSONString(obj) 方法时,如果 obj 对象中存在 null 值的属性,那么转换成 JSON 字符串时就会出现问题,最终输出 null 值或抛出异常。下面我们来详细讲解如何解决此问题,以下是完整攻略:
1. 基本原因
在 JSONObject.toJSONString() 方法中,会检查对象 obj 是否为 null,如果是 null,则直接返回 "null" 字符串。当对象 obj 中存在 null 值的属性时,转换成 JSON 字符串时就会出现问题。
2. 解决方法
2.1 使用JSONAware接口
JSONAware 接口中提供了 toJSONString() 方法,可以自定义转换成 JSON 字符串的规则。我们可以自定义一个实现了 JSONAware 接口的类,在实现 toJSONString() 方法时,对 null 值的属性进行处理,避免输出 "null" 字符串。
示例代码如下:
import com.alibaba.fastjson.JSONAware;
import com.alibaba.fastjson.JSONObject;
public class MyObject implements JSONAware {
private String name;
private Integer age;
private String desc;
// 省略getter和setter方法
@Override
public String toJSONString() {
JSONObject jsonObj = new JSONObject();
if (name != null) {
jsonObj.put("name", name);
}
if (age != null) {
jsonObj.put("age", age);
}
if (desc != null) {
jsonObj.put("desc", desc);
}
return jsonObj.toJSONString();
}
}
当 obj 对象为 MyObject 类型时,我们可以调用 JSONObject.toJSONString(obj) 方法将其转换成 JSON 字符串,避免了输出 "null" 字符串的问题。
2.2 使用SerializerFeature.PrettyFormat
SerializerFeature.PrettyFormat 可以格式化 JSON 字符串,并对 null 值的属性进行处理,将其转换成空串输出,而非 "null" 字符串。
示例代码如下:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializerFeature;
public class Main {
public static void main(String[] args) {
JSONObject obj = new JSONObject();
obj.put("name", "Tom");
obj.put("age", null);
obj.put("desc", "This is a description.");
// 格式化JSON字符串,并对null值的属性进行处理
String jsonString = JSON.toJSONString(obj, SerializerFeature.PrettyFormat,
SerializerFeature.WriteNullStringAsEmpty);
System.out.println(jsonString);
}
}
输出结果如下:
{
"desc": "This is a description.",
"name": "Tom",
"age": ""
}
3.总结
以上就是解决 JSONObject.toJSONString() 输出 null 的问题的两种方法,一种是自定义实现 JSONAware 接口,另一种是使用 SerializerFeature.PrettyFormat。这些方法适用于 fastjson 1.2.15 及以上版本。
本文标题为:解决JSONObject.toJSONString()输出null的问题
基础教程推荐
- MyBatis @Select注解介绍:基本用法与动态SQL拼写方式 2023-02-27
- 详解Spring Bean的配置方式与实例化 2022-12-27
- java解析Excel文件的方法实例详解 2023-01-18
- Java实现Excel表单控件的添加与删除 2022-11-16
- Spring data jpa @Query update的坑及解决 2022-10-30
- PHP Parse Error: syntax error, unexpected $end 错误的解决办法 2023-12-16
- Spring AOP实现打印HTTP接口出入参日志 2023-06-01
- java数学工具类Math详解(round方法) 2024-03-02
- 使用Java8 Stream流的skip + limit实现批处理的方法 2023-02-19
- Java多线程并发FutureTask使用详解 2023-02-05