snack4 - Json 序列化之数字的编解码
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);