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给修复了,点个赞!

目录
相关文章
|
6月前
|
JSON fastjson Java
fastjson是什么东西,怎么用?
fastjson是什么东西,怎么用?
|
6月前
|
存储 Java 关系型数据库
Spring Batch学习记录及示例项目代码
Spring Batch学习记录及示例项目代码
|
12月前
|
JSON fastjson 数据格式
fastjson基本使用
fastjson基本使用
80 0
|
JSON JavaScript 前端开发
Gson与Fastjson两种Json解析神器保姆级使用攻略
Gson与Fastjson两种Json解析神器保姆级使用攻略
479 0
Gson与Fastjson两种Json解析神器保姆级使用攻略
|
JSON Java fastjson
FastJson基本使用
FastJson基本使用
229 0
FastJson基本使用
|
Java 容器 Spring
Springboot Condition 实用讲解,只看一遍包学会
Springboot Condition 实用讲解,只看一遍包学会
274 0
Springboot Condition 实用讲解,只看一遍包学会
|
XML Java 程序员
Github 精选 #1 | 如何干掉 shape.xml 文件?
Github 精选 #1 | 如何干掉 shape.xml 文件?
Github 精选 #1 | 如何干掉 shape.xml 文件?
|
存储 JSON fastjson
FastJson在Java后端方面解析使用(二)
FastJson在Java后端方面解析使用(二)
413 0
FastJson在Java后端方面解析使用(二)