Releases: alibaba/fastjson2
fastjson 2.0.54版本发布,性能进一步提升
这又是一个性能优化Bug修复的版本更新版本,大家按需升级。
1. 性能优化
这个版本的性能优化包括:
1.1 使用SWAR(SIMD Within A Register)技巧来优化序列化字符串的性能
序列化时,写字符串检测是否存在特别字符是一个性能关键点,这个版本使用SWAR(SIMD Within A Register)的技巧来做快速检测。如下
package com.alibaba.fastjson2;
class JSONWriterUTF8 {
protected final long byteVectorQuote;
JSONWriterUTF8(Context ctx) {
// " -> 0x22, ' -> 0x27
this.byteVectorQuote = this.useSingleQuote ? 0x2727_2727_2727_2727L : 0x2222_2222_2222_2222L;
}
public void writeStringLatin1(byte[] value) {
final long vecQuote = this.byteVectorQuote;
int i = 0;
final int upperBound = (value.length - i) & ~7;
// 这里一次检测8个byte是否存在特别字符
for (; i < upperBound; i += 8) {
if (containsEscaped(IOUtils.getLongLittleEndian(value, i), vecQuote)) {
break;
}
}
// ...
}
static boolean containsEscaped(long v, long quote) {
/*
for (int i = 0; i < 8; ++i) {
byte c = (byte) data;
if (c == quote || c == '\\' || c < ' ') {
return true;
}
data >>>= 8;
}
return false;
*/
long x22 = v ^ quote; // " -> 0x22, ' -> 0x27
long x5c = v ^ 0x5c5c5c5c5c5c5c5cL;
x22 = (x22 - 0x0101010101010101L) & ~x22;
x5c = (x5c - 0x0101010101010101L) & ~x5c;
return ((x22 | x5c | (0x7F7F_7F7F_7F7F_7F7FL - v + 0x1010_1010_1010_1010L) | v) & 0x8080808080808080L) != 0;
}
}
1.2 优化在JDK 16+的readString性能
在JDK 16+的版本下,使用StringLatin1.indexOfChar方法加速扫描特殊字符,优化readString的性能。这个算法来自 wycst 的贡献。
class JSONReaderASCII {
static final int ESCAPE_INDEX_NOT_SET = -2;
protected int nextEscapeIndex = ESCAPE_INDEX_NOT_SET;
public String readString() {
int slashIndex = nextEscapeIndex;
if (slashIndex == ESCAPE_INDEX_NOT_SET || (slashIndex != -1 && slashIndex < offset)) {
nextEscapeIndex = slashIndex = IOUtils.indexOfChar(bytes, '\\', offset, end);
}
if (slashIndex == -1 || slashIndex > index) {
valueLength = index - offset;
offset = index;
// ...
}
}
- 获取StringLatin1.IndexOfChar MethodHandle的代码 https://github.com/alibaba/fastjson2/blob/2.0.54/core/src/main/java/com/alibaba/fastjson2/util/JDKUtils.java#L342
1.3 int/long/float/double的读取写性能
优化的技巧是一次性读取两个数字,如下:
package com.alibaba.fastjson2;
class JSONReaderUTF8 {
public final int readInt32Value() {
// ...
while (inRange
&& offset + 1 < end
&& (digit = IOUtils.digit2(bytes, offset)) != -1
) {
// max digits is 19, no need to check inRange (result == MULT_MIN_100 && digit <= (MULT_MIN_100 * 100 - limit))
if (inRange = (result > INT_32_MULT_MIN_100)) {
result = result * 100 - digit;
offset += 2;
}
}
}
}
package com.alibaba.fastjson2.util;
class IOUtils {
public static int digit2(byte[] bytes, int off) {
short x = UNSAFE.getShort(bytes, ARRAY_BYTE_BASE_OFFSET + off);
if (BIG_ENDIAN) {
x = Short.reverseBytes(x);
}
int d;
if ((((x & 0xF0F0) - 0x3030) | (((d = x & 0x0F0F) + 0x0606) & 0xF0F0)) != 0
) {
return -1;
}
return ((d & 0xF) << 3) + ((d & 0xF) << 1) // (d & 0xF) * 10
+ (d >> 8);
}
}
这个优化最初灵感源泉来自 https://github.com/wycst/wast 的 io.github.wycst.wast.json.JSONTypeDeserializer.NumberImpl#deserializeInteger所采用的算法,然后做了进一步的改进。
2. Issues
- 修复toJSONString实际可用空间小于预设的问题 #255
- 格式化输出支持使用空格代替Tab,新增两个JSONWriter.Feature为PrettyFormatWith2Space和PrettyFormatWith4Space
- 修复非法输入缺少第一个花括号
{
不报错的问题 #2592 - 增强识别枚举,原来不能识别toString的结果,新增识别toString的结果。 #2820
- JSONObject.to 支持Void.class和void.class返回null #2879
- 修复CSVWriter写入CSV数据超过 65536 个字节时报错 #2988
- 修复SeeAlso类型父类是Abstract类型时JVM Crash的问题 #2987
- 修复初始化JSONFactory某些场景会导致循环依赖导致死锁的问题 #2994
- 修复JSON.toJSON方法行为和JSON.toJSONString不一致的问题 #2981
- 增强对注释的支持 #2983
- 修复某些场景JSONWriter.Feature.WriteNulls导致Long/Double序列化结果为Null的问题 #3049
- 修复toJavaObject方法不能识别早期时间毫秒到LocalDateTime的转换问题 #3091
- 修复反序列化private Class结果和toJavaObject方法结果不一致的问题 #3134
- 增强fastjson 1.x的兼容性 #3208 #2739 # 3144 #3157
- 增强对Record的支持 #3090
- JSONPath支持使用path设置List中的对象 #3125
- 修复private Boolean类型字段使用valueFilter报错的问题 #3076
- 修复JDK 9+ writeStringEscaped某些场景数组越界报错 #3209
- 增加对Key为Map类型的反序列化支持 #3214
- JSON.parseObject方法在某些情况下反序列化编码出错的问题 #3223 #3219
- 支持修改useGsonAnnotation 配置 #3258
fastjson2缺省是能识别Gson的Annotation的,这个可以通过接口或者JVM启动参数关闭
import com.alibaba.fastjson2.JSONFactory;
// 手工关闭
JSONFactory.setUseGsonAnnotation(false);
也支持通过JVM启动参数关闭
-Dfastjson2.useGsonAnnotation=false
MAVEN依赖配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.54</version>
</dependency>
- android5针对优化版本
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.54.android5</version>
</dependency>
- android8针对优化版本
这个版本支持java.time和Optional
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.54.android8</version>
</dependency>
- 1.x 兼容版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.54</version>
</dependency>
- Spring 5 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.54</version>
</dependency>
- Spring 6 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.54</version>
</dependency>
3. 相关链接
- FASTJSON 1.x用户升级指南 https://github.com/alibaba/fastjson2/wiki/fastjson_1_upgrade_cn
- 相关issues https://github.com/alibaba/fastjson2/milestone/54
- 代码tag https://github.com/alibaba/fastjson2/tree/2.0.54
- Maven下载 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.54/
- Android5特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.54.android5/
- Android8特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.54.android8/
- 1.x兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson/2.0.54/
- 性能测试报告 https://github.com/alibaba/fastjson2/blob/main/docs/benchmark/benchmark_2.0.54.md
fastjson 2.0.53版本发布
这又是一个月度更新版本,大家按需升级。
Issues
- 支持DisableSingleQuote配置 #2908
- 修复配置JSONField#ignore之后导致死循环的问题 #2914
- 反序列化java.util.Date类型支持HH:mm:ss格式输入 #2905
- 修复兼容Jackson Annotation JsonUnwrapped某些场景不起作用的问题 #2846
- 修复兼容Jackson Annotation JsonFormat某些场景不起作用的问题 #2836
- 修复JSONB格式反序列化是忽略不存在Double/LocalDate字段报错的问题 #2823 #2907 #2902
- 修复反序列化java.util.RandomAccessSubList类型报错的问题 #2851
- DefaultObjectWriterProvider和DefaultObjectReaderProvider提供clear方法 #2860
- 修复某些场景反序列化LocalDateTime报错的问题 #2817
- 修复CSVWriter在writeDecimal计算空间不对的问题 #2848
- 修复JSONReader.Feature.UseBigDecimalForFloats行为不对的问题 #2866 #2867
- 修复使用 fastjson1 的 JSON.toJSON() 方法,转换后的数据中存在 com.alibaba.fastjson2.JSONArray #2856
- 修复与lombok AllArgsConstructor冲突的问题 #2901
- 支持Clickhouse UnsignedLong类型序列化 #2958
- 修复JSONB DUMP DECIMAL类型某些场景报错的问题 #2954
- 支持更多场景JSONSchema #2931
- 修复Long/Double字段配置JSONField#serializeFeatures WriteNulls不生效的问题 #2952
- 修复某些场景配置JSONType#alphabetic=false不生效的问题 #2959
2. MAVEN依赖配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.53</version>
</dependency>
- android5针对优化版本
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.53.android5</version>
</dependency>
- android8针对优化版本
这个版本支持java.time和Optional
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.53.android8</version>
</dependency>
- 1.x 兼容版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.53</version>
</dependency>
- Spring 5 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.53</version>
</dependency>
- Spring 6 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.53</version>
</dependency>
3. 相关链接
- FASTJSON 1.x用户升级指南 https://github.com/alibaba/fastjson2/wiki/fastjson_1_upgrade_cn
- 相关issues https://github.com/alibaba/fastjson2/milestone/53
- 代码tag https://github.com/alibaba/fastjson2/tree/2.0.53
- Maven下载 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.53/
- Android5特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.53.android5/
- Android8特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.53.android8/
- 1.x兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson/2.0.53/
- 性能测试报告 https://github.com/alibaba/fastjson2/blob/main/docs/benchmark/benchmark_2.0.53.md
fastjson 2.0.52发布
这又是一个月度例行发布的BUG FIX版本版本,大家按需升级。
Issues
- 修复属性为Collections.emptyList时出现的UnsupportedOperationException异常问题 #1835 #2691
- 完善枚举属性setter方法匹配逻辑 #2680
- 完善JSONPath的set方法跳过null #2656
- 修复
@JSONType
同时指定WriteClassName与NotWriteRootClassName依然输出根类名问题 #2662 - 修复ObjectReaderImplList与ObjectReaderImplMapTyped的createInstance出现的类型转换异常问题 #2665
- 完善引用支持
@
符号 #2671 - 调整最大EXP至2047,以支持更大数据 #2672
- 完善FieldReader对Object属性的支持 #2673
- 修复带有Filter时出现的序列化冒号缺失问题 #2678
- 调整ObjectReaderImplEnum数值读取判断逻辑为JSONReader.toInt方法 #2682
- 完善TypeUtils.cast方法对枚举的支持 #2726 #2688
- 完善Fastjson1对Map的兼容性 #2693
- 修复List属性时在指定ReferenceDetection序列化名称缺失问题 #2712
- 新增支持dd-MM-yyyy HH:mm:ss日期格式 #2757
- 完善readNumber0方法对后缀B,S或L的小数读取支持 #2768
- 修复
@JSONField
对boolean属性支持 #2795 - 完善JSONWriter.getPath对Map类型的支持 #2590
- 完善getInteger, getBigInteger与getBigDecimal对boolean类型的支持 #2745 #2746
- 新增parseObject(String text, Type type, JSONReader.Context context)方法 #2774
- JSONType新增支持RootName和arrayToMap配置 https://github.com/alibaba/fastjson2/wiki/array_to_map_cn
2. MAVEN依赖配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.52</version>
</dependency>
- android5针对优化版本
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.52.android5</version>
</dependency>
- android8针对优化版本
这个版本支持java.time和Optional
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.52.android8</version>
</dependency>
- 1.x 兼容版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.52</version>
</dependency>
- Spring 5 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.52</version>
</dependency>
- Spring 6 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.52</version>
</dependency>
3. 相关链接
- FASTJSON 1.x用户升级指南 https://github.com/alibaba/fastjson2/wiki/fastjson_1_upgrade_cn
- 相关issues https://github.com/alibaba/fastjson2/milestone/52
- 代码tag https://github.com/alibaba/fastjson2/tree/2.0.52
- Maven下载 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.52/
- Android5特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.52.android5/
- Android8特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.52.android8/
- 1.x兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson/2.0.52/
- 性能测试报告 https://github.com/alibaba/fastjson2/blob/main/docs/benchmark/benchmark_2.0.52.md
fastjson 2.0.51发布
这又是一个例行发布的BUG FIX版本版本,修复最近一个月用户反馈的问题,大家按需升级。
Issues
- 修复2.0.50引入的当反序列化传入Filter时OOM的问题
- 完善对kotlin的支持,修复某些场景反序列化kotilin.emptyList报错的问题 #2392
- 完善对Jackson Annotation的支持 #2641 #2643 #2644 #2649
- 修复某些情况下WriteNullStringAsEmpty不生效的问题 #2642
- 内置支持MongoDB Date类型 #2614
- 完善apt-codegen,支持生成Writer,支持graalvm native-image #2622 #2575 #2576
- 修复toJavaObject方法二层嵌套对象不传递features的问题 #2564 #2632
- 修复fastjson 1.x API的一些不兼容问题 #2565 #2529 #2578 #2584 #2585 #2593 #2598 #2640 #2639
- 修复JSONValidator.validate某些场景报错的问题 #2566
- 修复反序列化Key为数值0或者负数时结果不对的问题 #2570
- 修复JDK17下序列化对象字段包含Lock时报错的问题 #2571
- 修复超大整数反序列化weiBigDecimal结果不对的问题 #2582
- 修复反序列化EnumMap不支持autoType的问题 #2583
- 修复开启autoType支持反序列化HashMap会包含
@type
字段的问题 #2581 #2623 - 修复FastJsonHttpMessageConverter配置dateFormat不生效的问题 #2577
- 修复反序列化ConcurrentLinkedQueue存在引用时报错的问题 #2602
- 修复某些场景autoType long反序列化的结果为Integer类型的问题 #2608
- 修复某些场景反序列化AtomicLong报错的问题 #2615
- 支持通过long features配置全局以及JSONReader.Context和JSONWriter.Context的feature #2610
- 修复Map对象在Filter中获得的JSONWriter.getPath结果不对的问题 #2590
- JSONReader.Feature新增UseBigIntegerForInts和UseLongForInts,支持将整数缺省反序列化为BigInteger或者Long。 #2612
- 反序列化日期类型支持更多格式,包括JDK9以后默认的CLDR日期格式 #2635
2. MAVEN依赖配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.51</version>
</dependency>
- android5针对优化版本
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.51.android5</version>
</dependency>
- android8针对优化版本
这个版本支持java.time和Optional
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.51.android8</version>
</dependency>
- 1.x 兼容版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.51</version>
</dependency>
- Spring 5 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.51</version>
</dependency>
- Spring 6 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.51</version>
</dependency>
3. 相关链接
- FASTJSON 1.x用户升级指南 https://github.com/alibaba/fastjson2/wiki/fastjson_1_upgrade_cn
- 相关issues https://github.com/alibaba/fastjson2/milestone/51
- 代码tag https://github.com/alibaba/fastjson2/tree/2.0.51
- Maven下载 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.51/
- Android5特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.51.android5/
- Android8特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.51.android8/
- 1.x兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson/2.0.51/
- 性能测试报告 https://github.com/alibaba/fastjson2/blob/main/docs/benchmark/benchmark_2.0.51.md
fastjson 2.0.50发布
这又是一个例行月度更新的BUG FIX版本,大家按需升级。这个版本继续优化了JIT生成的代码,性能有提升,并且支持配置全局配置在JIT时去掉不必要功能的代码生成,提升性能。
注意已知问题
- 当parseObject制定Filter时会导致OOM(会尽快发布2.0.51版本修复,或者先回退到2.0.49版本)
Issues
- 支持全局配置JIT参数提升性能 https://github.com/alibaba/fastjson2/wiki/jit_optimization
- 修复JDK8 ARM服务器下序列化boolean类型偶发结果不对的问题 #2210 #2502
- 修复org.bson.types.Decimal128转double报错的问题 #2558
- 内置android proguard rules,减少用户手动添加规则 #2511 #2466
- 修复org.joda.time.DateTime使用JSONB序列化和反序列化报错的问题 #2563
- 修复序列化包括java.security.ProtectionDomain字段对象报错的问题 #2562
- 修复序列化配置WriteNonStringValueAsString在Boolean类型不生效的问题 #2560
- 修复JSON.tJSON在格式为"millis"时处理Date类型报错的问题 #2550
- 修复不支持fastjson 1.x JSONField#unwrap配置的问题 #2551 #2525
- 修复在某些场景不能识别复杂Jackson Annotation JsonSubTypes的问题 #2548
- 修复反序列化enum类型输入不存在负数数值时报错的问题 #2531 #2536
- 修复反序列化ImmutableCollection字段报错的问题 #2532
- 修复兼容包某些场景报错的问题 #2542 #2537 #2534 #2526 #2521 #2520 #2476 #2440 #2450
- 修复Android API Leval < 24时序列化boolean类型报错的问题 #2497
- 反序列化boolean类型支持更多输入格式 #2493
- 修复部分PropertyNamingStrategy不起作用的问题 #2478 #2459
- 修复LinkedMultiValueMap类型反序列化结果类型不对的问题 #2489
- 修复反序列化Set类型报错的问题 #2475
- 修复JDK17模块化使用报错的问题 #2451
- 修复序列化java.sql.Timestamp带millis和不带millis时格式不同的问题 #2460
- 修复int/long类型不能识别带千分符字符串的问题 #2461
- 修复序列化hutool中CaseInsensitiveMap/CaseInsensitiveLinkedMap类型结果不对的问题 #2458
- 支持通过JSONFactory. setDefaultWriterAlphabetic全局配置保持字段顺序输出
- 修复序列化java.time.Period结果不对的问题 #2446
- 修复JSON.toJSON会导致部分Field类型丢失的问题 #2447
- 新增将Properties对象转换为Java对象的支持 #2442
2. MAVEN依赖配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.50</version>
</dependency>
- android5针对优化版本
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.50.android5</version>
</dependency>
- android8针对优化版本
这个版本支持java.time和Optional
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.50.android8</version>
</dependency>
- 1.x 兼容版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.50</version>
</dependency>
- Spring 5 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.50</version>
</dependency>
- Spring 6 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.50</version>
</dependency>
3. 相关链接
- FASTJSON 1.x用户升级指南 https://github.com/alibaba/fastjson2/wiki/fastjson_1_upgrade_cn
- 相关issues https://github.com/alibaba/fastjson2/milestone/50
- 代码tag https://github.com/alibaba/fastjson2/tree/2.0.50
- Maven下载 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.50/
- Android5特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.50.android5/
- Android8特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.50.android8/
- 1.x兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson/2.0.50/
- 性能测试报告 https://github.com/alibaba/fastjson2/blob/main/docs/benchmark/benchmark_2.0.50.md
fastjson 2.0.49发布
这又是一个例行月度更新的BUG FIX版本,大家按需升级。
1. Issues
- 增强对JSONPath语法的支持 #2401 #2405
- 增强对Jackson Annotation的支持 #2399
- 增强JSONB反序列化对日期类型的不匹配类型时的处理 #2408
- 修复JSONB反序列化某些场景会丢失字段的问题 #2411
- 修复JSONType#serializeFeatures配置WriteNonStringValueAsString 不生效的问题 #2431
- 修复Map.Entry类型序列化WriteNonStringValueAsString不生效的问题 #2431
- 修复序列化ReentrantLock序列化异常的问题 #2437
- 修复2.0.48引入的序列化在数据较大时报writeName8Raw方法数据越界异常的问题 #2433 #2419 #2429
- 修复反序列化空EnumSet报错的问题 #2423
- 提供Redission Codec #2420 具体使用看文档
- 修复长度为14 key某些场景会导致数据丢失的问题 #2409
- 修复GraalVM报错的问题 #2406
- 修复kotlin jdk 21.0.2 情况下JSONWriter.Feature.WriteEnumsUsingName不生效的问题 #2276
- 修复反序列化如果多个Key的hashCode相同时反序列化会字段丢失的问题 #2411
- 修复SimplePropertyPreFilter和fastjson 1.x不兼容的问题 #2384
- 修复反序列化不支持hutool Tree的问题 #2375
- 修复autoTypeFilter在某些场景不起作用的问题 #2367
- 修复parseArray方法不能正确处理引用的问题 #2348
- 修复android5版本对longValueExtract方法的兼容问题
- 修复JSONType配置FieldBased不起作用的问题 #2371
2. MAVEN依赖配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.49</version>
</dependency>
- android5针对优化版本
这个版本和android4兼容版本基本一致,只是使用了java.nio.charset.StandardCharsets,后续将会不再升级android4兼容版本。
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.49.android5</version>
</dependency>
- android8针对优化版本
这个版本支持java.time和Optional
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.49.android8</version>
</dependency>
- 1.x 兼容版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.49</version>
</dependency>
- Spring 5 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.49</version>
</dependency>
- Spring 6 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.49</version>
</dependency>
3. 相关链接
- FASTJSON 1.x用户升级指南 https://github.com/alibaba/fastjson2/wiki/fastjson_1_upgrade_cn
- 相关issues https://github.com/alibaba/fastjson2/milestone/49
- 代码tag https://github.com/alibaba/fastjson2/tree/2.0.49
- Maven下载 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.49/
- Android5特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.49.android5/
- Android8特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.49.android8/
- 1.x兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson/2.0.49/
- 性能测试报告 https://github.com/alibaba/fastjson2/blob/main/docs/benchmark/benchmark_2.0.49.md
4. 关于稳定性
fastjson2 core部分已经积累6925个testcase,测试覆盖率75%,每个PR合入都需要分别在JDK8/11/17/21下跑通这些testcase,不断发现问题和使用深入和更多场景有关。
fastjson 2.0.48发布
这又是一个性能优化 & Bug Fixed的版本,这个版本中,JSON.toJSONString和JSONB.toByte和JSONB.parseObject的性能有提升。
Issues
- 修复JSONType注解指定自定义序列化无效的问题 #2269
- 序列化OOM时ErrorMessage提示配置Feature.LargeObject #2331
- 修复使用JSONB解析带format的Timestamp类会报错的问题 #2332
- 修复JSONWriter.Feature.BrowserCompatible在BigDecimal带小数的大数不生效的问题 #2283
- 新增JSONReader.Feature.NonErrorOnNumberOverflow,数值溢出时不报错 #2305
- 修复Set类型反序列化报错的问题 #2302
- 修复Fastjson1 带 $ref 的数据在 fastjson2 无法正确反序列化的问题 #2296
- 增强对LocalTime日期反序列化多种格式的识别 #2310
- 修复LocalDateTime类型Locale不生效的问题
- 新增JSONWriter.Feature.SortMapEntriesByKeys,用于签名场景排序 #2318
- 反序列化float/double类型支持输入NaN #2309 #2300
- 修复枚举类型自定义反序列化类型参数为空的问题 #2329
- 修增JSONReader.Feature.EmptyStringAsNull,可以将空字符串转换为null #2317
- 修复Spring6版的FastJsonHttpMessageConverter存在问题,导致请求头不返回Content-Length #2284
- 修复定制序列化时属性值如果是子类会失效 #2286
- 修复JSONObject类型不支持输入转以后的String类型输入(兼容) #2334
- 修复配置JSONField(jsonDirect=true)时报错的问题 #2347
- 修复SupportSmartMatch全局配置无效的问题 #2349
- 修复泛型Class反序列化报错的问题 #2356
- 修复ObjectReaderCreator.createFieldReader偶发ConcurrentModificationException的问题 #2358
- 修复JSONField配置JSONReader.Feature.FieldBased 无效的问题 #2350
- 支持关闭解析Gson Annotation的开关 #2346
MAVEN依赖配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.48</version>
</dependency>
- android5针对优化版本
这个版本和android4兼容版本基本一致,只是使用了java.nio.charset.StandardCharsets,后续将会不再升级android4兼容版本。
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.48.android5</version>
</dependency>
- android8针对优化版本
这个版本支持java.time和Optional
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.48.android8</version>
</dependency>
- 1.x 兼容版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.48</version>
</dependency>
- Spring 5 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.48</version>
</dependency>
- Spring 6 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.48</version>
</dependency>
相关链接
- FASTJSON 1.x用户升级指南 https://github.com/alibaba/fastjson2/wiki/fastjson_1_upgrade_cn
- 相关issues https://github.com/alibaba/fastjson2/milestone/48
- 代码tag https://github.com/alibaba/fastjson2/tree/2.0.48
- Maven下载 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.48/
- Android5特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.48.android5/
- Android8特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.48.android8/
- 1.x兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson/2.0.48/
- 性能测试报告 https://github.com/alibaba/fastjson2/blob/main/docs/benchmark/benchmark_2.0.48.md
fastjson 2.0.47发布
这个版本主要是大幅度提升android版本的首次序列化/反序列化的性能。在序列化大于1M的JSON对象时性能也有了较大提升。
Issues
- 在非android版本某些Android设备上处理数据时崩溃 #2263
- JSONField Annotation defaultValue配置支持Enum #2239
- 修复反序列化List类型字段输入null时报错的问题 #2233
- 修复反序列化时JSON.toJavaObject方法有错误识别setter方法的问题 #2230
- 修复引用类型、Boolean、Short 不支持JSONWriter.Feature.WriteNulls #2234
- 修复序列化kotlin data cass调用copy方法的问题 #2231
- 修复有些场景JSON.isValid方法抛异常的问题 #2222
- 修复JSONPath不支持中划线的问题 #2228
- 提升android下首次序列化的性能 #2189
MAVEN依赖配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.47</version>
</dependency>
- android5针对优化版本
这个版本和android4兼容版本基本一致,只是使用了java.nio.charset.StandardCharsets,后续将会不再升级android4兼容版本。
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.47.android5</version>
</dependency>
- android8针对优化版本
这个版本支持java.time和Optional
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.47.android8</version>
</dependency>
- 1.x 兼容版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.47</version>
</dependency>
- Spring 5 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.47</version>
</dependency>
- Spring 6 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.47</version>
</dependency>
相关链接
- FASTJSON 1.x用户升级指南 https://github.com/alibaba/fastjson2/wiki/fastjson_1_upgrade_cn
- 相关issues https://github.com/alibaba/fastjson2/milestone/47
- 代码tag https://github.com/alibaba/fastjson2/tree/2.0.47
- Maven下载 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.47/
- Android5特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.47.android5/
- Android8特别优化版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.47.android8/
- 1.x兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson/2.0.47/
- 性能测试报告 https://github.com/alibaba/fastjson2/blob/main/docs/benchmark/benchmark_2.0.47.md
fastjson 2.0.46发布
这又是一个BUG FIX版本,大家按需升级。这个版本在android 4 ~ android 33上性能有了非常大的提升。
Issues
- 修复JSONB反序列化skip不存在int类型字段某些场景报错的问题 #1257
- 修复JSONB反序列化自定义异常类的List类型变量赋值为null时报错的问题 #2181
- 修复反序列化某些场景不兼容fastjson 1.x "new Date(millis)"的格式 #2087
- 修复jdk module功能启用后package重复的问题 #2176
- 修复某些场景下序列化数组类型不正确的问题 #2175
- 修复toJSON不能识别循环引用的问题 #2187
- 修复JSONPath exists函数不支持多级表达式的问题 #2190
- 修复反序列化double结束为\r\n等转义时报错的问题 #2164
- 修复不兼容日期格式yyyy-MM-dd hh:mm:ss的问 #2199
- 修复不兼容日期格式yyyy-MM-dd'T'HH:mm:ssXXX的问题#2206
- 修复当 Double 字段为 null时。开启 WriteNullNumberAsZero 和 WriteLongAsString,会变成 "0"的问题 #2211
- 修复不兼容jackson的Annotation JsonDeserialize#contentUsing的问题 #2217
- 修复List字段JSONField#deserializeUsing不起作用的问题 #2213
- 修复java.sql.Struct类型序列化报错的问题 #2205
- 修复某些场景引用检测不起作用的问题 #2180
- 修复JSONWriter.Feature.BrowserCompatible 导致 LocalDateTime 类型Map Key未按预期格式进行格式化处理 #2183
- 修复序列化不会忽略InputStream类型字段的问题 #2202
MAVEN依赖配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.46</version>
</dependency>
- android4兼容版本
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.46.android4</version>
</dependency>
- android5兼容版本
这个版本和android4兼容版本基本一致,只是使用了java.nio.charset.StandardCharsets,后续将会不再升级android4兼容版本。
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.46.android5</version>
</dependency>
- android8兼容版本
这个版本支持java.time和Optional
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.46.android8</version>
</dependency>
- 1.x 兼容版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.46</version>
</dependency>
- Spring 5 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.46</version>
</dependency>
- Spring 6 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.46</version>
</dependency>
相关链接
- FASTJSON 1.x用户升级指南 https://github.com/alibaba/fastjson2/wiki/fastjson_1_upgrade_cn
- 相关issues https://github.com/alibaba/fastjson2/milestone/46
- 代码tag https://github.com/alibaba/fastjson2/tree/2.0.46
- Maven下载 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.46/
- Android4兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.46.android4/
- Android5兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.46.android5/
- Android8兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.46.android8/
- 1.x兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson/2.0.46/
- 性能测试报告 https://github.com/alibaba/fastjson2/blob/main/docs/benchmark/benchmark_2.0.46.md
fastjson 2.0.45发布
这又是一个BUG FIX版本,大家按需升级
Issues
- 修复JSONPath对JSONB格式支持不完整的问题 #2138
- 修复fastjson2-extension module-info配置不对的问题 #1923
- 修复数字大约38位时导致负数结果为整数的问题 #2128
- 修复引用解析结果不对的问题 #2140
- 修复JSONPath.set在某些场景会空指针的问题 #2145
- 修复JSONPath在某些场景结果会重复的问题 #2143
- 修复解析错误格式数据不报错问题 #2155
- 修复在继承子类序列化在某些场景报类型转换错误的问题 #2153 #1942
- 修复某些场景反序列化解析引用报错的问题 #2148
- 修复某些场景序列化引用计算不对导致序列化层数过多报错的问题 #2144
- 修复none-public enum配置JSONField(value=true)不起作用的问题 #2154
- 修复autoType在Filter返回类型为null是报空指针错误的问题 #2127
MAVEN依赖配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.45</version>
</dependency>
- android4兼容版本
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.45.android4</version>
</dependency>
- 1.x 兼容版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.45</version>
</dependency>
- Spring 5 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring5</artifactId>
<version>2.0.45</version>
</dependency>
- Spring 6 extension配置
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2-extension-spring6</artifactId>
<version>2.0.45</version>
</dependency>
相关链接
- FASTJSON 1.x用户升级指南 https://github.com/alibaba/fastjson2/wiki/fastjson_1_upgrade_cn
- 相关issues https://github.com/alibaba/fastjson2/milestone/45
- 代码tag https://github.com/alibaba/fastjson2/tree/2.0.45
- Maven下载 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.45/
- Android4兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.45.android4/
- 1.x兼容版本 https://repo1.maven.org/maven2/com/alibaba/fastjson/2.0.45/
- 性能测试报告 https://github.com/alibaba/fastjson2/blob/main/docs/benchmark/benchmark_2.0.45.md