Skip to content

[BUG]基于 float 类型的 json 序列化 Float.NaN/INFINITY/NEGATIVE_INFINITY 不再以 null 进行输出 #423

@magical1989

Description

@magical1989

问题描述

基于 float 类型的 json 序列化 Float.NaN/INFINITY/NEGATIVE_INFINITY 不再以 null 进行输出

环境信息

  • 版本信息:[e.g.:Fastjson2 2.0.4]

重现步骤

如何操作可以重现该问题:
想使用新版本 fastjson2 来替换原有 fastjson(基于您的性能测试和对内部部分数据进行压测后,效果的确非常惊艳)
发现在 float 类型 NaN 时,与原来 fastjson 1 版本时期的语义存在差异。
示例代码如下:

    public static void main(String[] args) {
        float[] a = {0f, 0.0f, 0.1f, Float.NaN, Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY};
        System.out.println(JSON.toJSONString(a));
    }

[0.0,0.0,0.1,NaN,Infinity,-Infinity],这是对应的输出。

研读您的代码后发现,RyuFloat 中基于 float 的实现的确会按照上述演示的业务进行输出。
个人理解,您这里是想表达出 float 类型在 Java 中存在的情况会有 Float.NaN/INFINITY/NEGATIVE_INFINITY 这三种例外的情况。
但是从 json 的角度(json.org)上并没有这类值的关键字,这里是否保留 fastjson 1 的全 null 处理会更加合理呢?或至少留下一个 Feature 枚举提供可选。

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions