fastjson Map SerializerFeature无效 :报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

fastjson Map SerializerFeature无效 :报错

2020-06-07 09:49:12 488 1

@温少

fastJson 对于 Map的features 指定是无效的吧?

比如,我在features 指定了,WriteNullStringAsEmpty,经测试无效,fastjson使用的是最新版本。

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, features);
System.out.println(str);



private static final SerializerFeature[] features = { SerializerFeature.SortField,//排序字段
SerializerFeature.WriteMapNullValue, // 输出空置字段
SerializerFeature.WriteNullListAsEmpty, // list字段如果为null,输出为[],而不是null
SerializerFeature.WriteNullNumberAsZero, // 数值字段如果为null,输出为0,而不是null
SerializerFeature.WriteNullBooleanAsFalse, // Boolean字段如果为null,输出为false,而不是null
SerializerFeature.WriteNullStringAsEmpty // 字符类型字段如果为null,输出为"",而不是null
};

取消 提交回答
全部回答(1)
  • kun坤
    2020-06-07 09:49:27

    SerializerFeature.WriteMapNullValue

    Map类型的属性为null值是按照empty输出。而不是MapValueNullAsEmpty..需要你自己定制序列化。

    ######

    引用来自“GinKo”的评论

    SerializerFeature.WriteMapNullValue

    Map类型的属性为null值是按照empty输出。而不是MapValueNullAsEmpty..需要你自己定制序列化。

    兄弟,没用的。


    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.SortField, SerializerFeature.WriteMapNullValue);
    System.out.println(str);


    输出
    {"d":"wuzhuti.cn","b":"","c":null,"a":1}


    fastjson 这个功能没用啊

    ######

    我都跟你说了,SerializerFeature.WriteMapNullValue定制项是说如果Map是null值,则序列化为空字符串,如果Map内部put的值是null,依照目前的版本是没办法的。你可以自己定制一套序列化,特殊处理。


    ######

    引用来自“GinKo”的评论

    我都跟你说了,SerializerFeature.WriteMapNullValue定制项是说如果Map是null值,则序列化为空字符串,如果Map内部put的值是null,依照目前的版本是没办法的。你可以自己定制一套序列化,特殊处理。


    感觉定制只能是最后一种方案了?因为涉及到多功能的数据返回,Fastjson本身Map是不自带的。谢谢你。######

    我这两天一直在跟踪这个bug  ,这是fastjson1.2.58出现的bug 降级到1.2.29就好用了。 1.2.58版本com.alibaba.fastjson.serializer.MapSerializer 211行 应该是bug 1.2.29版本处是

    if (value == null) {
                        if (!out.isEnabled(SerializerFeature.WRITE_MAP_NULL_FEATURES)) {
                            continue;
                        }
                    }

    而1.2.58版本为

    if (value == null && 
              !out.isEnabled(SerializerFeature.WriteMapNullValue)) {
              continue;
            }

    应该是一个bug。 所有的定制皆不生效 只有指定WriteMapNullValue时才生效

    ######

    引用来自“yuyang109351618”的评论

    我这两天一直在跟踪这个bug  ,这是fastjson1.2.58出现的bug 降级到1.2.29就好用了。 1.2.58版本com.alibaba.fastjson.serializer.MapSerializer 211行 应该是bug 1.2.29版本处是

    if (value == null) {
                        if (!out.isEnabled(SerializerFeature.WRITE_MAP_NULL_FEATURES)) {
                            continue;
                        }
                    }

    而1.2.58版本为

    if (value == null && 
              !out.isEnabled(SerializerFeature.WriteMapNullValue)) {
              continue;
            }

    应该是一个bug。 所有的定制皆不生效 只有指定WriteMapNullValue时才生效

    是的

    0 0
相关问答

37

回答

阿里官方Java代码规范标准《阿里巴巴Java开发手册》下载

管理贝贝 2017-02-10 15:14:36 77760浏览量 回答数 37

2

回答

[@徐雷frank][¥20]在用fastjson将字符串转为JSONObject对象时,double类型被转为BigDecimal类型

jiang0512 2018-11-23 15:15:21 7066浏览量 回答数 2

1

回答

@ResponseBody与response.getWriter .write()区别

蛮大人123 2016-02-22 11:11:38 5142浏览量 回答数 1

2

回答

赛题一:《人机行为识别》大家写udf的时候是什么提取json数据啊

cj753733 2017-02-15 20:04:39 4691浏览量 回答数 2

2

回答

1.2.7版本fastjson转字符串后key的排序,如何能完全按字母顺序排列?

杨冬芳 2016-07-07 16:13:51 6915浏览量 回答数 2

2

回答

建议将aliyun-sdk-oss依赖的json-lib改成fastjson

咸鸭蛋 2015-11-30 16:43:48 6559浏览量 回答数 2

1

回答

为什么fastjson字段为null时不输出空字符串?

蛮大人123 2016-03-09 18:31:25 5524浏览量 回答数 1

2

回答

Redis存放java对象为何序列化?

落地花开啦 2016-02-20 15:07:44 8149浏览量 回答数 2

1

回答

fastjson在反序列化时怎么解析对象中的继承

蛮大人123 2016-02-28 14:02:57 4600浏览量 回答数 1

1

回答

fastJson如何将json字符串转为list<javaBean>

杨冬芳 2016-07-06 14:25:43 5198浏览量 回答数 1
+关注
0
文章
13401
问答
问答排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载