Solon v3.7.1

snack4 - Json 序列化之数字的编解码

</> markdown

1、涉及数字的编码码特性:

特性描述备注
Read_AllowZeroLeadingNumbers读取时允许零开头的数字例:00.1
Read_UseBigDecimalMode读取使用大数字模式,用 BigDecimal 替代 Double
Read_UseBigIntegerMode读取使用大整型模式,用 BigInteger 替代 Long
Write_NullNumberAsZero写入数字为 null 时转为 0例:null -> 0
Write_BooleanAsNumber写入布尔时转为数字例:false -> 0
Write_NumberTypeSuffix写入数字类型例:0.1D(不符合 json 规范)
Write_NumbersAsString写入数字时使用字符串模式例:0 -> "0"
Write_LongAsString写入长整型时使用字符串模式例:0L -> "0"
Write_DoubleAsString写入双精度浮点数时使用字符串模式例:0D -> "0"
Write_BigDecimalAsPlain写入大数时使用 plain 模式默认为 toString() 处理

常见的 web 开发中,javascript 不支持 long 和 double (只支持 int 和 float),建议转成 string。

2、主要控制方式有两种:

方式描述影响范围
A选项特性
B值字段特性当前字段

示例1:方式A

Options options = Options.of(Feature.Write_LongAsString, Feature.Write_DoubleAsString);
ONode.serialize(data, options);

示例2:方式B

public class Data {
    @ONodeAttr(features = Feature.Write_LongAsString)
    long orderId;
}

ONode.serialize(new Data(), options);