fastjson2/docs/features_cn.md
Joseph.W 9f631cd05e
[Feature] add a DisableSingleQuote flag for JsonReader (#2909)
* add support to disable single quote ondemand

* update doc for disable single quote

* fix checkstyle
2024-08-31 03:48:47 +08:00

100 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 通过Features配置序列化和反序列化的行为
# 1. Feature介绍
在fastjson 2.x中有两个Feature分别用来配置序列化和反序列化的行为。
* JSONWriter.Feature 配置序列化的行为
* JSONReader.Feature 配置反序列化的行为
# 2. 在JSON的toJSONString和parse方法中使用Feature
## 2.1 在JSON的toJSONString方法中使用JSONWriter.Feature
```java
Bean bean = ...;
JSON.toJSONString(bean, JSONWriter.Feature.WriteNulls); // 输出对象中值为null的字段
```
## 2.2 在JSON的parse方法中使用JSONReader.Feature
```java
String jsonStr = ...;
JSON.parseObject(jsonStr, JSONReader.Feature.UseBigDecimalForDoubles); // 将小数数值读取为double
```
# 3. 在JSONField和JSONType上配置features
```java
class Model {
@JSONField(serializeFeatures = JSONWriter.Feature.BrowserCompatible)
public long value;
}
***
```
# 4. JSONReader.Feature介绍
| JSONReader.Feature | 介绍 |
|---------------------------------|-----------------------------------------------------------------------------------------------------|
| FieldBased | 基于字段反序列化如果不配置会默认基于public的field和getter方法序列化。配置后会基于非static的field包括private做反序列化。在fieldbase配置下会更安全 |
| IgnoreNoneSerializable | 反序列化忽略非Serializable类型的字段 |
| SupportArrayToBean | 支持数据映射的方式 |
| InitStringFieldAsEmpty | 初始化String字段为空字符串"" |
| SupportAutoType | 支持自动类型,要读取带"@type"类型信息的JSON数据需要显式打开SupportAutoType |
| SupportSmartMatch | 默认下是camel case精确匹配打开这个后能够智能识别camel/upper/pascal/snake/Kebab五中case |
| UseNativeObject | 默认是使用JSONObject和JSONArray配置后会使用LinkedHashMap和ArrayList |
| SupportClassForName | 支持类型为Class的字段使用Class.forName。为了安全这个是默认关闭的 |
| IgnoreSetNullValue | 忽略输入为null的字段 |
| UseDefaultConstructorAsPossible | 尽可能使用缺省构造函数在fieldBase打开这个选项没打开的时候会可能用Unsafe.allocateInstance来实现 |
| UseBigDecimalForFloats | 默认配置会使用BigDecimal来parse小数打开后会使用Float |
| UseBigDecimalForDoubles | 默认配置会使用BigDecimal来parse小数打开后会使用Double |
| ErrorOnEnumNotMatch | 默认Enum的name不匹配时会忽略打开后不匹配会抛异常 |
| TrimString | 对读取到的字符串值做trim处理 |
| ErrorOnNotSupportAutoType | 遇到AutoType报错缺省是忽略 |
| DuplicateKeyValueAsArray | 重复Key的Value不是替换而是组合成数组 |
| AllowUnQuotedFieldNames | 支持不带双引号的字段名 |
| NonStringKeyAsString | 非String类型的Key当做String处理 |
| Base64StringAsByteArray | 将byte[]序列化为Base64格式的字符串 |
| DisableSingleQuote | Do not allow single quote on key and value
# 5. JSONWriter.Feature介绍
| JSONWriter.Feature | 介绍 |
|-----------------------------------|---------------------------------------------------------------------------------------|
| FieldBased | 基于字段序列化如果不配置会默认基于public的field和getter方法序列化。配置后会基于非static的field包括private做序列化。 |
| IgnoreNoneSerializable | 序列化忽略非Serializable类型的字段 |
| BeanToArray | 将对象序列为[101,"XX"]这样的数组格式,这样的格式会更小 |
| WriteNulls | 序列化输出空值字段 |
| BrowserCompatible | 在大范围超过JavaScript支持的整数输出为字符串格式 |
| NullAsDefaultValue | 将空置输出为缺省值Number类型的null都输出为0String类型的null输出为""数组和Collection类型的输出为[] |
| WriteBooleanAsNumber | 将true输出为1false输出为0 |
| WriteNonStringValueAsString | 将非String类型的值输出为String不包括对象和数据类型 |
| WriteClassName | 序列化时输出类型信息 |
| NotWriteRootClassName | 打开WriteClassName的同时不输出根对象的类型信息 |
| NotWriteHashMapArrayListClassName | 打开WriteClassName的同时不输出类型为HashMap/ArrayList类型对象的类型信息反序列结合UseNativeObject使用能节省序列化结果的大小 |
| NotWriteDefaultValue | 当字段的值为缺省值时,不输出,这个能节省序列化后结果的大小 |
| WriteEnumsUsingName | 序列化enum使用name |
| WriteEnumUsingToString | 序列化enum使用toString方法 |
| IgnoreErrorGetter | 忽略setter方法的错误 |
| PrettyFormat | 格式化输出 |
| ReferenceDetection | 打开引用检测这个缺省是关闭的和fastjson 1.x不一致 |
| WriteNameAsSymbol | 将字段名按照symbol输出这个仅在JSONB下起作用 |
| WriteBigDecimalAsPlain | 序列化BigDecimal使用toPlainString避免科学计数法 |
| UseSingleQuotes | 使用单引号 |
| MapSortField | 对Map中的KeyValue按照Key做排序后再输出。在有些验签的场景需要使用这个Feature |
| WriteNullListAsEmpty | 将List类型字段的空值序列化输出为空数组"[]" |
| WriteNullStringAsEmpty | 将String类型字段的空值序列化输出为空字符串"" |
| WriteNullNumberAsZero | 将Number类型字段的空值序列化输出为0 |
| WriteNullBooleanAsFalse | 将Boolean类型字段的空值序列化输出为false |
| NotWriteEmptyArray | 数组类型字段当length为0时不输出 |
| WriteNonStringKeyAsString | 将Map中的非String类型的Key当做String类型输出 |
| ErrorOnNoneSerializable | 序列化非Serializable对象时报错 |
| WritePairAsJavaBean | 将 Apache Common 包中的Pair对象当做JavaBean序列化 |
| BrowserSecure | 浏览器安全,将会'<' '>' '(' ')'字符做转义输出 |
| WriteLongAsString | 将Long序列化为String |
| WriteEnumUsingOrdinal | 序列化Enum使用Ordinal缺省是name |
| WriteThrowableClassName | 序列化Throwable时带上类型信息 |
| LargeObject | 这个是一个保护措施,是为了防止序列化有循环引用对象消耗过大资源的保护措施。 |
| UnquoteFieldName | 不带引号输出Key |
| NotWriteSetClassName | 当打开WriteClassName时又不想输出Set的类型信息使用这个Feature |
| NotWriteNumberClassName | 当打开WriteClassName时又不想输出Number的类型信息比如L/S/B/F/D这种后缀使用这个Feature |