FastJson 转换 javaBean 时 null 值被忽略都问题

@[toc]

问题

当 JavaeBean 中某个属性值为 null 时,转换为 JSONObject 对象或者 json 字符串时,该属性值被忽略。
如何让不管值是否为 null,转化后该属性还存在,只是值为 null。

情况演示

   class St {
    private String sid;
    private String sname;
    private String ssex;
    public String getSid() {
        return sid;
    }
    public void setSid(String sid) {
        this.sid = sid;
    }
    public String getSname() {
        return sname;
    }
    public void setSname(String sname) {
        this.sname = sname;
    }
    public String getSsex() {
        return ssex;
    }
    public void setSsex(String ssex) {
        this.ssex = ssex;
    }
    public static void main(String[] args) {
        St st = new St();
        st.setSid("111");
        st.setSname("aaa");
        JSONObject jsonSt = JSONObject.parseObject(JSON.toJSONString(st));
        System.out.println(jsonSt);
    }
}

输出结果: {“sname”:"aaa","sid":111} ssex属性没了!

解决办法

在转化的方法中添加这个属性:SerializerFeature.WriteMapNullValue。

public static void main(String[] args) {
        St st = new St();
        st.setSid("111");
        st.setSname("aaa");
        JSONObject jsonSt = JSONObject.parseObject(JSON.toJSONString(st, SerializerFeature.WriteMapNullValue));
        System.out.println(JSON.toJSONString(jsonSt, SerializerFeature.WriteMapNullValue));
    }

输出结果:{"sname":"aaa","sid":111,"ssex":null}

更多属性

上文中用到的 JSON.toJSONString(Object object, SerializerFeature… features) 方法 SerializerFeature 的属性值还有如下
SerializerFeature属性
含义
UseSingleQuotes 使用单引号而不是双引号,默认为false
WriteMapNullValue 使用输出为null的参数,默认为false

当value为null时,JSONObject.toJSONString()返回的json字符串将不展示对应的key,这明显不是我们想要的,所以可以使用

SONObject.toJSONString(Object object, SerializerFeature... features) 来获取我们想要的值,SerializerFeature属性对应的值和含义如下:

名称 含义
QuoteFieldNames 输出key时是否使用双引号,默认为true
UseSingleQuotes 使用单引号而不是双引号,默认为false
WriteMapNullValue 是否输出值为null的字段,默认为false
WriteEnumUsingToString Enum输出name()或者original,默认为false
UseISO8601DateFormat Date使用ISO8601格式输出,默认为false
WriteNullListAsEmpty List字段如果为null,输出为[],而非null
WriteNullStringAsEmpty 字符类型字段如果为null,输出为”“,而非null
WriteNullNumberAsZero 数值字段如果为null,输出为0,而非null
WriteNullBooleanAsFalse Boolean字段如果为null,输出为false,而非null
SkipTransientField 如果是true,类中的Get方法对应的Field是transient,序列化时将会被忽略。默认为true
SortField 按字段名称排序后输出。默认为false
WriteTabAsSpecial 把\t做转义输出,默认为false 不推荐
PrettyFormat 结果是否格式化,默认为false
WriteClassName 序列化时写入类型信息,默认为false。反序列化是需用到
DisableCircularReferenceDetect 消除对同一对象循环引用的问题,默认为false
WriteSlashAsSpecial 对斜杠’/’进行转义
BrowserCompatible 将中文都会序列化为\uXXXX格式,字节数会多一些,但是能兼容IE6,默认为false
WriteDateUseDateFormat 全局修改日期格式,默认为false。JSON.DEFFAULT_DATE_FORMAT = “yyyy-MM-dd”;JSON.toJSONString(obj,SerializerFeature.WriteDateUseDateFormat);
DisableCheckSpecialChar 一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false
NotWriteRootClassName 含义
BeanToArray 将对象转为array输出
WriteNonStringKeyAsString 含义
NotWriteDefaultValue 含义
BrowserSecure 含义
IgnoreNonFieldGetter 含义
WriteEnumUsingName 含义

原文地址:https://blog.51cto.com/7964880/2398784

时间: 2024-10-07 13:29:54

FastJson 转换 javaBean 时 null 值被忽略都问题的相关文章

【转】Fastjson生成json时Null属性不显示

Fastjson生成json时Null属性不显示 举个例子 Map < String , Object > jsonMap = new HashMap< String , Object>(); jsonMap.put("a",1); jsonMap.put("b",""); jsonMap.put("c",null); jsonMap.put("d","wuzhuti.cn

Fastjson生成json时Null属性不显示

原文地址:http://blog.csdn.net/lisheng19870305/article/details/52035126 举个例子 Map < String , Object > jsonMap = new HashMap< String , Object>();   jsonMap.put("a",1);   jsonMap.put("b","");   jsonMap.put("c",n

使用fastjson,gson解析null值的时候键保留

由于业务需求...所以查阅资料,总结如下: 使用gson实现方法:只需要把new Gson()改为: new GsonBuilder().serializeNulls().create(); 就可以了 public class Test { public static void main(String[] args) { Gson gson= new GsonBuilder().serializeNulls().create(); Map < String , Object > jsonMap

fastjson生成json时Null属性不显示的解决方法

举个例子 Map < String , Object > jsonMap = new HashMap< String , Object>(); jsonMap.put("a",1); jsonMap.put("b",""); jsonMap.put("c",null); jsonMap.put("d","wuzhuti.cn"); String str = JSO

SQL 中 Null 值使用时需要注意的地方

一.Null不支持大小/相等判断 1.下面的2个查询,不管表 users 中有多少条记录,返回的记录都是0行 select * from  users where deleted_at = null; select * from  users where deleted_at != null; 用常规的比较操作符(normal conditional operators)来将 null 与其他值比较是没有意义的. Null 也不等于 Null 2.将某个值与 null 进行比较的正确方法是使用

fastjson null 值处理

偶然用到fastjson转换json 在前台用js解析竟然某些字段没有,曾经用过gson.联想到是不是相似gson默认将null值不显示了,找了下资料果真如此 直接上代码吧 import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; public class Test

解决用 VB 中用 ADO 访问 数据库时 SQL 查询处理 Null 值的问题( 使用 iff(isNull(字段), 为空时的值,不为空时的值) 来处理)

程序的环境是 VB6 + ADO + Access,在用 SQL 语句查询时,希望把两个字段合并成一个字段,但其中一个字段 Null 值直接导致两个字段合并后也变成了 Null 值.之前只能用 VB 中的 IsNull 分别处理两个字段的值,前段时间想尝试用 SQL 语句直接解决,确一直未能成功, 差点放弃之际找到了答案,总结如下: 目的: 实现 Select ( 字段1 +  字段2 ) As A 问题: 字段2 如果为空值 (Null),则 不论字段1 的值是否为空,A 的值为空值 (Nul

3.12 在运算和比较时使用null值

NULL值永远不会等于或者不等于任何值,也包括NULL值自己本身,但是需要像计算真实值一样计算可为空列的返回值 解决方案:使用Coalesce函数/ISNULL函数将NULL转化为一个可以用来作为标准值进行比较的真实值 select ename,comm,coalesce(comm,0) from emp where coalesce(comm,0)<(select comm from emp where ename ='WARD');

《奇妙的NULL值,你知道多少?》

<NULL值的多义性分析> 谈到NULL值,很多人都是很熟悉,但是深入了解后,又感觉到陌生,对其含义和用法,都无法很准确的理解.NULL在数据库和编程语言中,存在的意义和附带的含义不同. NULL这个概念,在数据库中产生的时候就存在异议.NULL值的意义现在主流的想法为:"未知值或不确定的值".至于是否应该被视为未知值或不确定的值,存在较大的争议. NULL值在编程语言中的意思为"空的引用",即变量只是申明了,但没有实例化,在内存中没有分配内存. 由于N