fastjson2使用Feature.WriteBooleanAsNumber踩坑

简介: fastjson2使用Feature.WriteBooleanAsNumber踩坑

fastjson2 是 FASTJSON 项目的重要升级,目标是为下一个十年提供一个高性能的JSON库, fastjson2 性能相比原先旧的 fastjson 有了很大提升,并且 fastjson2 更安全,完全删除autoType白名单,提升了安全性。

地址: https://github.com/alibaba/fastjson2

添加依赖:

dependencies {
    implementation 'com.alibaba.fastjson2:fastjson2:2.0.25'
}

以下是一组性能对比数据:

// ecs.c7.xlarge-oracle-jdk1.8.0_341_x64
      fastjson2 > fastjson1 > jackson > gson
jdk8  100%        76.07%      39.15%    33.18%
jdk11 100%        73.15%      39.20%    34.59%
jdk17 100%        91.18%      35.55%    33.98%
jdk18 100%        85.52%      36.21%    28.54%
jdk19 100%        86.91%      37.48%    29.09%

但在用的过程中还是遇到了一些坑,记录如下:

Feature.WriteBooleanAsNumber 通过字面意思为为true的序列化成1,为false的值序列化成0,

但 通过

JSON.toJSONString(message, Feature.WriteBooleanAsNumber);

或者通过如下方式

@JSONField(serializeFeatures = Feature.WriteBooleanAsNumber)
    private boolean human;
    public boolean isHuman() {
        return human;
    }
    public void setHuman(boolean human) {
        this.human = human;
    }

都无效生成的结果还是true 或者false,

那么,是否是isHuman出了问题呢,于是把isHuman改成getHuman,

@JSONField(serializeFeatures = Feature.WriteBooleanAsNumber)
    private boolean human;
    public boolean getHuman() {
        return human;
    }
    public void setHuman(boolean human) {
        this.human = human;
    }

发现结果还是不对.

会不会是包装类和基本类型的问题呢,于是改成如下:

@JSONField(serializeFeatures = Feature.WriteBooleanAsNumber)
    private Boolean human;
    public Boolean getHuman() {
        return human;
    }
    public void setHuman(Boolean human) {
        this.human = human;
    }

再次通过JSON.toJSONString(message); 发现还是无效,于是改成

private Boolean human;
    public Boolean getHuman() {
        return human;
    }
    public void setHuman(Boolean human) {
        this.human = human;
    }

JSON.toJSONString(message, Feature.WriteBooleanAsNumber); 结果符合预期:{“human”:1}

这里有两个问题:

1:为什么基本类型不给支持?

2:为什么通过@JSONField(serializeFeatures = Feature.WriteBooleanAsNumber) 这种方式就不行?

顺手提了个issue给官方:

https://github.com/alibaba/fastjson2/issues/1241

发现官方速度好快,几个小时就已经有反馈,并且把这两个BUG给修复了,点个赞!

目录
相关文章
|
JSON 安全 Java
jackson学习之二:jackson-core
了解jackson最底层的功能逻辑
258 0
jackson学习之二:jackson-core
|
8月前
|
JSON fastjson Java
fastjson是什么东西,怎么用?
fastjson是什么东西,怎么用?
112 0
|
JSON fastjson 数据格式
fastjson基本使用
fastjson基本使用
96 0
|
分布式计算 JavaScript 前端开发
Fastjson 很快,但不适合我....
Fastjson 很快,但不适合我....
Fastjson 很快,但不适合我....
|
JSON Java fastjson
FastJson基本使用
FastJson基本使用
248 0
FastJson基本使用
|
JSON 安全 IDE
用了几年的 Fastjson,我最终替换成了Jackson!
为什么要替换fastjson 工程里大量使用了fastjson作为序列化和反序列化框架,甚至ORM在处理部分字段也依赖fastjson进行序列化和反序列化。那么作为大量使用的基础框架,为什么还要进行替换呢?
1501 0
用了几年的 Fastjson,我最终替换成了Jackson!
|
存储 JSON fastjson
FastJson在Java后端方面解析使用(二)
FastJson在Java后端方面解析使用(二)
431 0
FastJson在Java后端方面解析使用(二)
|
存储 JSON Java
细数Jackson为啥能够成为SpringBoot的亲儿子
细数Jackson为啥能够成为SpringBoot的亲儿子
277 0
|
存储 IDE Java
JDK14的新特性:Lombok的终结者record
JDK14的新特性:Lombok的终结者record
|
XML JSON 安全
放弃FastJson!一篇就够,Jackson的功能原来如此之牛(万字干货)
放弃FastJson!一篇就够,Jackson的功能原来如此之牛(万字干货)
798 0