zoukankan      html  css  js  c++  java
  • 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");
    
    
    String str = JSONObject.toJSONString(jsonMap);
    System.out.println(str);
    //输出结果:{"a":1,"b":"",d:"wuzhuti.cn"}

    从输出结果可以看出,null对应的key已经被过滤掉;这明显不是我们想要的结果,这时我们就需要用到fastjson的SerializerFeature序列化属性

    也就是这个方法:JSONObject.toJSONString(Object object, SerializerFeature... features)

    Fastjson的SerializerFeature序列化属性

    --来自oschina bfleeee博客

    QuoteFieldNames———-输出key时是否使用双引号,默认为true 
    WriteMapNullValue——–是否输出值为null的字段,默认为false 
    WriteNullNumberAsZero—-数值字段如果为null,输出为0,而非null 
    WriteNullListAsEmpty—–List字段如果为null,输出为[],而非null 
    WriteNullStringAsEmpty—字符类型字段如果为null,输出为”“,而非null 
    WriteNullBooleanAsFalse–Boolean字段如果为null,输出为false,而非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 = JSONObject.toJSONString(jsonMap,SerializerFeature.WriteMapNullValue);
    System.out.println(str);
    //输出结果:{"a":1,"b":"","c":null,"d":"wuzhuti.cn"}


    Spring配置FastJson

    <mvc:annotation-driven>
    <mvc:message-converters>  
           <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">  
               <property name="supportedMediaTypes"> 
                   <list>  
                       <value>application/json;charset=UTF-8</value>  
                   </list>  
               </property>
               <property name="features">
                <list>
                <value>DisableCircularReferenceDetect </value>
                <value>WriteMapNullValue</value>
                <value>WriteNullListAsEmpty</value>
                <value>WriteNullStringAsEmpty</value>
                <value>WriteNullNumberAsZero</value>
                <value>WriteNullBooleanAsFalse</value>
                </list>
               </property>  
           </bean>    
    </mvc:message-converters>   
    </mvc:annotation-driven>


    //模型

    public class TopicVo implements Serializable {


    private static final long serialVersionUID = 1L;


    private Long id;

    private String name;


    private String nullName;
    private Integer intName;
    private Long longName;
    private Double doubleName;
    private Map mapName;
    private List listName;
    private Map mapNameWithValue = Maps.newHashMap();
    private Map mapNameWithValue2 = Maps.newHashMap();
    {
    mapNameWithValue2.put("a", "a");
    }
    }


    //json数据,空的转换成了null或者0或者空[]

    {
          "doubleName": 0,
          "id": 17,
          "intName": 0,
          "listName": [],
          "longName": 0,
          "mapName": null,
          "mapNameWithValue": {},
          "mapNameWithValue2": {
            "a": "a"
          },
          "name": "好像的",
          "nullName": ""
        }



    完整的选项

    package com.alibaba.fastjson.serializer;
    
    /**
     * @author wenshao[szujobs@hotmail.com]
     */
    public enum SerializerFeature {
        QuoteFieldNames,
        /**
         * 
         */
        UseSingleQuotes,
        /**
         * 
         */
        WriteMapNullValue,
        /**
         * 用枚举toString()值输出
         */
        WriteEnumUsingToString,
        /**
         * 用枚举name()输出
         */
        WriteEnumUsingName,
        /**
         * 
         */
        UseISO8601DateFormat,
        /**
         * @since 1.1
         */
        WriteNullListAsEmpty,
        /**
         * @since 1.1
         */
        WriteNullStringAsEmpty,
        /**
         * @since 1.1
         */
        WriteNullNumberAsZero,
        /**
         * @since 1.1
         */
        WriteNullBooleanAsFalse,
        /**
         * @since 1.1
         */
        SkipTransientField,
        /**
         * @since 1.1
         */
        SortField,
        /**
         * @since 1.1.1
         */
        @Deprecated
        WriteTabAsSpecial,
        /**
         * @since 1.1.2
         */
        PrettyFormat,
        /**
         * @since 1.1.2
         */
        WriteClassName,
    
        /**
         * @since 1.1.6
         */
        DisableCircularReferenceDetect,
    
        /**
         * @since 1.1.9
         */
        WriteSlashAsSpecial,
    
        /**
         * @since 1.1.10
         */
        BrowserCompatible,
    
        /**
         * @since 1.1.14
         */
        WriteDateUseDateFormat,
    
        /**
         * @since 1.1.15
         */
        NotWriteRootClassName,
    
        /**
         * @since 1.1.19
         */
        DisableCheckSpecialChar,
    
        /**
         * @since 1.1.35
         */
        BeanToArray,
    
        /**
         * @since 1.1.37
         */
        WriteNonStringKeyAsString,
        
        /**
         * @since 1.1.42
         */
        NotWriteDefaultValue,
        
        /**
         * @since 1.2.6
         */
        BrowserSecure,
        
        /**
         * @since 1.2.7
         */
        IgnoreNonFieldGetter
        ;


      参考资料:https://wuzhuti.cn/2175.html

  • 相关阅读:
    用Python构建你自己的推荐系统
    相似度算法之余弦相似度
    python(五)常用模块学习
    Linux系统CPU核数等信息查看
    【SSH网上商城项目实战28】使用Ajax技术局部更新商品数量和总价
    【SSH网上商城项目实战27】域名空间的申请和项目的部署及发布
    【SSH网上商城项目实战26】完成订单支付后的短信发送功能
    【SSH网上商城项目实战25】使用java email给用户发送邮件
    【SSH网上商城项目实战24】Struts2中如何处理多个Model请求
    【SSH网上商城项目实战23】完成在线支付功能
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462329.html
Copyright © 2011-2022 走看看