开发者社区> 问答> 正文

fastjson Map SerializerFeature无效 - fastjson报错

@温少

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
};

展开
收起
montos 2020-05-31 16:06:58 1533 0
1 条回答
写回答
取消 提交回答
  • 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时才生效

    是的

    2020-05-31 16:07:44
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载