发布于
AI总结: 本文介绍了Fastjson 1.2.83版本的序列化特性、反序列化特性、全局安全配置及其他全局配置的详细信息。序列化特性包括字段名引号使用、空值处理、枚举序列化方式等,默认状态各异。反序列化特性则涉及输入流管理、字段名处理、日期格式识别等,部分特性默认启用。全局安全配置强调了自动类型推断的安全性,以及对反序列化类的白名单检查。其他全局配置则涉及日期格式和特性掩码的动态设置。
优化建议:可以考虑在文中加入示例代码,以帮助用户更直观地理解各特性的使用场景。此外,提供一些常见问题的解答或最佳实践,可以进一步提升用户的使用体验。
1.2.83
com.alibaba.fastjson.serializer.SerializerFeature
特性名称 | 默认状态 | 功能描述 |
---|---|---|
QuoteFieldNames | 启用 | 字段名用双引号包裹 |
UseSingleQuotes | 禁用 | 使用单引号代替双引号 |
WriteMapNullValue | 禁用 | 序列化时输出值为 null 的字段 |
WriteEnumUsingToString | 禁用 | 序列化枚举值时调用 toString() 方法 |
WriteEnumUsingName | 启用 | 序列化枚举值时调用 name() 方法 |
UseISO8601DateFormat | 禁用 | 使用ISO8601日期格式 |
WriteNullListAsEmpty | 禁用 | 1.1 将 null 的集合字段输出为 []
|
WriteNullStringAsEmpty | 禁用 | 1.1 将 null 的字符串字段输出为 ""
|
WriteNullNumberAsZero | 禁用 | 1.1 将 null 的数值字段输出为 0
|
WriteNullBooleanAsFalse | 禁用 | 1.1 将 null 的布尔字段输出为 false
|
SkipTransientField | 启用 | 1.1 忽略被 transient 修饰的字段 |
SortField | 启用 | 1.1 排序字段 |
禁用 | 1.1.1 把\t做转义输出 | |
PrettyFormat | 禁用 | 1.1.2 格式化输出(缩进和换行) |
WriteClassName | 禁用 | 1.1.2 输出 @type 字段(支持多态反序列化) |
DisableCircularReferenceDetect | 禁用 | 1.1.6 禁用循环引用检测(提升性能,但可能栈溢出) |
WriteSlashAsSpecial | 禁用 | 1.1.9 对斜杠'/'进行转义 |
BrowserCompatible | 禁用 | 1.1.10 对 Unicode 特殊字符进行转义(兼容浏览器场景) |
WriteDateUseDateFormat | 禁用 | 1.1.14 使用全局日期格式(需配置 JSON.DEFFAULT_DATE_FORMAT ) |
NotWriteRootClassName | 禁用 | 1.1.15 不输出根类名 |
禁用 | 1.1.19 如果有特殊字符如双引号,将会在转成json时带有反斜杠转义符 | |
BeanToArray | 禁用 | 1.1.35 将 Java 对象序列化为 JSON 数组(按字段定义顺序) |
WriteNonStringKeyAsString | 禁用 | 1.1.37 将非字符串类型字段序列化为字符串形式 |
NotWriteDefaultValue | 禁用 | 1.1.42 不设默认值 |
BrowserSecure | 禁用 | 1.2.6 浏览器安全,将<>()字符做转义输出 |
IgnoreNonFieldGetter | 禁用 | 1.2.7 忽略为空的属性 |
WriteNonStringValueAsString | 禁用 | 1.2.9 将非字符串类型值序列化为字符串形式 |
IgnoreErrorGetter | 禁用 | 1.2.11 忽略那些抛错的getter方法 |
WriteBigDecimalAsPlain | 禁用 | 1.2.16 将 BigDecimal 序列化为普通数值(不科学计数法) |
MapSortField | 禁用 | 1.2.27 对Map中的键值对进行排序 |
com.alibaba.fastjson.parser.Feature
特性名称 | 默认状态 | 功能描述 |
---|---|---|
AutoCloseSource | 启用 | 自动关闭输入流 |
AllowComment | 禁用 | 允许 JSON 中包含 // 或 /* */ 注释 |
AllowUnQuotedFieldNames | 启用 | 允许字段名不加双引号 |
AllowSingleQuotes | 启用 | 允许字段值使用单引号 |
InternFieldNames | 启用 | 缓存字段名(提升性能) |
AllowISO8601DateFormat | 禁用 | 识别和处理 ISO 8601 标准的时间格式 |
AllowArbitraryCommas | 启用 | 允许在JSON字符串中存在任意逗号,即使它们不在键值对之间 |
UseBigDecimal | 启用 | 将浮点数解析为 BigDecimal (避免精度丢失) |
IgnoreNotMatch | 启用 | 1.1.3 忽略无法匹配的字段(不抛异常) |
SortFeidFastMatch | 启用 | 1.1.3 排序字段优先匹配 |
DisableASM | 禁用 | 1.1.3 禁用ASM |
DisableCircularReferenceDetect | 禁用 | 1.1.7 是否检测循环引用 |
InitStringFieldAsEmpty | 禁用 | 1.1.10 对于没有值得字符串属性设置为空串 |
SupportArrayToBean | 禁用 | 1.1.35 允许将 JSON 数组反序列化为 JavaBean |
OrderedField | 禁用 | 1.2.3 按字段定义顺序解析 JSON |
DisableSpecialKeyDetect | 禁用 | 1.2.5 关闭特殊字符的转义 |
UseObjectArray | 禁用 | 1.2.9 |
SupportNonPublicField | 禁用 | 1.2.22, 1.1.54.android |
IgnoreAutoType | 禁用 | 1.2.29 |
DisableFieldSmartMatch | 禁用 | 1.2.30 禁用字段名智能匹配(如驼峰转下划线) |
SupportAutoType | 禁用 | 1.2.41, backport to 1.1.66.android 允许通过 @type 自动反序列化多态类型(高危,需白名单控制) |
NonStringKeyAsString | 禁用 | 1.2.42 |
CustomMapDeserializer | 禁用 | 1.2.45 |
ErrorOnEnumNotMatch | 禁用 | 1.2.55 |
SafeMode | 禁用 | 1.2.68 |
TrimStringFieldValue | 禁用 | 1.2.72 |
UseNativeJavaObject | 禁用 | 1.2.77 use HashMap instead of JSONObject, ArrayList instead of JSONArray |
com.alibaba.fastjson.parser.ParserConfig
配置项 | 默认值 | 功能描述 |
---|---|---|
AutoTypeSupport | false |
是否启用 @type 自动类型推断(强烈建议保持关闭) |
SafeMode | false |
严格模式(仅允许反序列化内置基础类型,需手动配置白名单) |
AsmEnable | true |
启用 ASM 字节码技术加速反序列化 |
DefaultClassLoader | null |
指定类加载器用于加载反序列化类 |
CheckAutoType | true |
反序列化时检查类名是否在白名单中 |
AutoTypeCheckHandler | null |
自定义 @type 校验处理器 |
DenyClassNames | 内置 | 默认拒绝反序列化的危险类列表(如 java.lang.ProcessBuilder ) |
com.alibaba.fastjson.JSON
配置项 | 默认值 | 功能描述 |
---|---|---|
JSON.DEFAULT_DATE_FORMAT | null |
全局日期格式(如 "yyyy-MM-dd HH:mm:ss" ) |
JSON.DEFAULT_GENERATE_FEATURE | 动态 | 全局默认启用的序列化特性掩码 |
JSON.DEFAULT_PARSER_FEATURE | 动态 | 全局默认启用的反序列化特性掩码 |