当我们调用 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的问题
				
        
 
            
        基础教程推荐
- Java中EnvironmentAware 接口的作用 2023-01-23
 - Java+mysql实现学籍管理系统 2023-03-16
 - 是否适合从javabean类更新数据库? 2023-11-04
 - JSP 动态树的实现 2023-12-17
 - 深入理解约瑟夫环的数学优化方法 2024-03-07
 - 运用El表达式截取字符串/获取list的长度实例 2023-08-01
 - JavaWeb 实现验证码功能(demo) 2024-04-14
 - springboot下使用shiro自定义filter的个人经验分享 2024-02-27
 - 使用Java和WebSocket实现网页聊天室实例代码 2024-02-25
 - Java编写实现窗体程序显示日历 2023-01-02
 
    	
    	
    	
    	
    	
    	
    	
    	
						
						
						
						
						
				
				
				
				