fastjson2使用Feature.WriteBooleanAsNumber踩坑
创始人
2025-05-28 21:40:52
0

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_x64fastjson2 > 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

相关内容

热门资讯

吹风机养生:真能顶得上老中医吗... 近年来,社交平台上流行起了“吹风机养生”的说法,许多博主宣称用吹风机对着特定的穴位吹热风,可以温阳驱...
深夜王炸,GPT-5.5发布 财联社 美东时间周四,OpenAI公布了其最新的人工智能模型——GPT-5.5。该公司表示,该模型在...
台湾同胞参加海军成立77周年纪... 4月23日,台湾同胞登上海军舰艇参观并与海军军官合影留念。新华社记者 李杰 摄 新华社青岛4月23日...
特朗普:这世界疯了 美国司法部当地时间4月23日证实,参与强行控制并转移委内瑞拉总统马杜罗的美国陆军特种部队军士长甘农·...
从冲击千亿市值到被申请破产重整... 图/ic 八年亏损超84亿元!“中国影视第一股”华谊兄弟被申请重整。 4月23日晚,华谊兄弟传媒股份...
“保安与停车女子和好接吻”,A... 撰稿/苏士仪(媒体人) 编辑/王言虎 校对/王心 ▲女司机与保安发生肢体冲突一事,持续引发关注。图...
美伊冲突前景不明 国际油价再度... 当地时间4月24日,由于美国与伊朗冲突前景仍不明朗,市场避险情绪升温,国际油价再度上涨。布伦特原油上...
美国发生群体性枪击事件,8名1... 新华社消息,美国路易斯安那州什里夫波特市19日发生一起群体性枪击事件,造成8名儿童死亡,枪手被警方击...
274亿美金砸向核武器,威慑还... 文︱陆弃 能源部长克里斯·赖特在2026年4月16号的一场公开场合称,美国正在推进的核武器现代化计划...