Skip to content

Releases: alibaba/fastjson2

fastjson 2.0.54版本发布,性能进一步提升

12 Jan 02:14
Compare
Choose a tag to compare

这又是一个性能优化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;
    }
}

https://github.com/alibaba/fastjson2/blob/2.0.54/core/src/main/java/com/alibaba/fastjson2/JSONWriterUTF8.java#L484

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;
           // ...
    }
}

https://github.com/alibaba/fastjson2/blob/2.0.54/core/src/main/java/com/alibaba/fastjson2/JSONReaderASCII.java#L1445

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/alibaba/fastjson2/blob/2.0.54/core/src/main/java/com/alibaba/fastjson2/JSONReaderUTF8.java#L3506

这个优化最初灵感源泉来自 https://github.com/wycst/wast 的 io.github.wycst.wast.json.JSONTypeDeserializer.NumberImpl#deserializeInteger所采用的算法,然后做了进一步的改进。

2. Issues

  1. 修复toJSONString实际可用空间小于预设的问题 #255
  2. 格式化输出支持使用空格代替Tab,新增两个JSONWriter.Feature为PrettyFormatWith2Space和PrettyFormatWith4Space
  3. 修复非法输入缺少第一个花括号{不报错的问题 #2592
  4. 增强识别枚举,原来不能识别toString的结果,新增识别toString的结果。 #2820
  5. JSONObject.to 支持Void.class和void.class返回null #2879
  6. 修复CSVWriter写入CSV数据超过 65536 个字节时报错 #2988
  7. 修复SeeAlso类型父类是Abstract类型时JVM Crash的问题 #2987
  8. 修复初始化JSONFactory某些场景会导致循环依赖导致死锁的问题 #2994
  9. 修复JSON.toJSON方法行为和JSON.toJSONString不一致的问题 #2981
  10. 增强对注释的支持 #2983
  11. 修复某些场景JSONWriter.Feature.WriteNulls导致Long/Double序列化结果为Null的问题 #3049
  12. 修复toJavaObject方法不能识别早期时间毫秒到LocalDateTime的转换问题 #3091
  13. 修复反序列化private Class结果和toJavaObject方法结果不一致的问题 #3134
  14. 增强fastjson 1.x的兼容性 #3208 #2739 # 3144 #3157
  15. 增强对Record的支持 #3090
  16. JSONPath支持使用path设置List中的对象 #3125
  17. 修复private Boolean类型字段使用valueFilter报错的问题 #3076
  18. 修复JDK 9+ writeStringEscaped某些场景数组越界报错 #3209
  19. 增加对Key为Map类型的反序列化支持 #3214
  20. JSON.parseObject方法在某些情况下反序列化编码出错的问题 #3223 #3219
  21. 支持修改useGsonAnnotation 配置 #3258
    fastjson2缺省是能识别Gson的Annotation的,这个可以通过接口或者JVM启动参数关闭
import com.alibaba.fastjson2.JSONFactory;

// 手工关闭
JSONFactory.setUseGsonAnnotation(false);

也支持通过JVM启动参数关闭

-Dfastjson2.useGsonAnnotation=false
  1. 修复错误格式没有及时报错的问题 #3260
  2. public首字母大写的字段,序列化重复key生成 #3220

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 2.0.53版本发布

16 Sep 16:30
Compare
Choose a tag to compare

这又是一个月度更新版本,大家按需升级。

Issues

  1. 支持DisableSingleQuote配置 #2908
  2. 修复配置JSONField#ignore之后导致死循环的问题 #2914
  3. 反序列化java.util.Date类型支持HH:mm:ss格式输入 #2905
  4. 修复兼容Jackson Annotation JsonUnwrapped某些场景不起作用的问题 #2846
  5. 修复兼容Jackson Annotation JsonFormat某些场景不起作用的问题 #2836
  6. 修复JSONB格式反序列化是忽略不存在Double/LocalDate字段报错的问题 #2823 #2907 #2902
  7. 修复反序列化java.util.RandomAccessSubList类型报错的问题 #2851
  8. DefaultObjectWriterProvider和DefaultObjectReaderProvider提供clear方法 #2860
  9. 修复某些场景反序列化LocalDateTime报错的问题 #2817
  10. 修复CSVWriter在writeDecimal计算空间不对的问题 #2848
  11. 修复JSONReader.Feature.UseBigDecimalForFloats行为不对的问题 #2866 #2867
  12. 修复使用 fastjson1 的 JSON.toJSON() 方法,转换后的数据中存在 com.alibaba.fastjson2.JSONArray #2856
  13. 修复与lombok AllArgsConstructor冲突的问题 #2901
  14. 支持Clickhouse UnsignedLong类型序列化 #2958
  15. 修复JSONB DUMP DECIMAL类型某些场景报错的问题 #2954
  16. 支持更多场景JSONSchema #2931
  17. 修复Long/Double字段配置JSONField#serializeFeatures WriteNulls不生效的问题 #2952
  18. 修复某些场景配置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 2.0.52发布

14 Jul 14:43
Compare
Choose a tag to compare

这又是一个月度例行发布的BUG FIX版本版本,大家按需升级。

Issues

  1. 修复属性为Collections.emptyList时出现的UnsupportedOperationException异常问题 #1835 #2691
  2. 完善枚举属性setter方法匹配逻辑 #2680
  3. 完善JSONPath的set方法跳过null #2656
  4. 修复@JSONType同时指定WriteClassName与NotWriteRootClassName依然输出根类名问题 #2662
  5. 修复ObjectReaderImplList与ObjectReaderImplMapTyped的createInstance出现的类型转换异常问题 #2665
  6. 完善引用支持@符号 #2671
  7. 调整最大EXP至2047,以支持更大数据 #2672
  8. 完善FieldReader对Object属性的支持 #2673
  9. 修复带有Filter时出现的序列化冒号缺失问题 #2678
  10. 调整ObjectReaderImplEnum数值读取判断逻辑为JSONReader.toInt方法 #2682
  11. 完善TypeUtils.cast方法对枚举的支持 #2726 #2688
  12. 完善Fastjson1对Map的兼容性 #2693
  13. 修复List属性时在指定ReferenceDetection序列化名称缺失问题 #2712
  14. 新增支持dd-MM-yyyy HH:mm:ss日期格式 #2757
  15. 完善readNumber0方法对后缀B,S或L的小数读取支持 #2768
  16. 修复@JSONField对boolean属性支持 #2795
  17. 完善JSONWriter.getPath对Map类型的支持 #2590
  18. 完善getInteger, getBigInteger与getBigDecimal对boolean类型的支持 #2745 #2746
  19. 新增parseObject(String text, Type type, JSONReader.Context context)方法 #2774
  20. 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 2.0.51发布

01 Jun 10:04
Compare
Choose a tag to compare

这又是一个例行发布的BUG FIX版本版本,修复最近一个月用户反馈的问题,大家按需升级。

Issues

  1. 修复2.0.50引入的当反序列化传入Filter时OOM的问题
  2. 完善对kotlin的支持,修复某些场景反序列化kotilin.emptyList报错的问题 #2392
  3. 完善对Jackson Annotation的支持 #2641 #2643 #2644 #2649
  4. 修复某些情况下WriteNullStringAsEmpty不生效的问题 #2642
  5. 内置支持MongoDB Date类型 #2614
  6. 完善apt-codegen,支持生成Writer,支持graalvm native-image #2622 #2575 #2576
  7. 修复toJavaObject方法二层嵌套对象不传递features的问题 #2564 #2632
  8. 修复fastjson 1.x API的一些不兼容问题 #2565 #2529 #2578 #2584 #2585 #2593 #2598 #2640 #2639
  9. 修复JSONValidator.validate某些场景报错的问题 #2566
  10. 修复反序列化Key为数值0或者负数时结果不对的问题 #2570
  11. 修复JDK17下序列化对象字段包含Lock时报错的问题 #2571
  12. 修复超大整数反序列化weiBigDecimal结果不对的问题 #2582
  13. 修复反序列化EnumMap不支持autoType的问题 #2583
  14. 修复开启autoType支持反序列化HashMap会包含@type字段的问题 #2581 #2623
  15. 修复FastJsonHttpMessageConverter配置dateFormat不生效的问题 #2577
  16. 修复反序列化ConcurrentLinkedQueue存在引用时报错的问题 #2602
  17. 修复某些场景autoType long反序列化的结果为Integer类型的问题 #2608
  18. 修复某些场景反序列化AtomicLong报错的问题 #2615
  19. 支持通过long features配置全局以及JSONReader.Context和JSONWriter.Context的feature #2610
  20. 修复Map对象在Filter中获得的JSONWriter.getPath结果不对的问题 #2590
  21. JSONReader.Feature新增UseBigIntegerForInts和UseLongForInts,支持将整数缺省反序列化为BigInteger或者Long。 #2612
  22. 反序列化日期类型支持更多格式,包括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 2.0.50发布

12 May 05:44
Compare
Choose a tag to compare

这又是一个例行月度更新的BUG FIX版本,大家按需升级。这个版本继续优化了JIT生成的代码,性能有提升,并且支持配置全局配置在JIT时去掉不必要功能的代码生成,提升性能。

注意已知问题

  • 当parseObject制定Filter时会导致OOM(会尽快发布2.0.51版本修复,或者先回退到2.0.49版本)

Issues

  1. 支持全局配置JIT参数提升性能 https://github.com/alibaba/fastjson2/wiki/jit_optimization
  2. 修复JDK8 ARM服务器下序列化boolean类型偶发结果不对的问题 #2210 #2502
  3. 修复org.bson.types.Decimal128转double报错的问题 #2558
  4. 内置android proguard rules,减少用户手动添加规则 #2511 #2466
  5. 修复org.joda.time.DateTime使用JSONB序列化和反序列化报错的问题 #2563
  6. 修复序列化包括java.security.ProtectionDomain字段对象报错的问题 #2562
  7. 修复序列化配置WriteNonStringValueAsString在Boolean类型不生效的问题 #2560
  8. 修复JSON.tJSON在格式为"millis"时处理Date类型报错的问题 #2550
  9. 修复不支持fastjson 1.x JSONField#unwrap配置的问题 #2551 #2525
  10. 修复在某些场景不能识别复杂Jackson Annotation JsonSubTypes的问题 #2548
  11. 修复反序列化enum类型输入不存在负数数值时报错的问题 #2531 #2536
  12. 修复反序列化ImmutableCollection字段报错的问题 #2532
  13. 修复兼容包某些场景报错的问题 #2542 #2537 #2534 #2526 #2521 #2520 #2476 #2440 #2450
  14. 修复Android API Leval < 24时序列化boolean类型报错的问题 #2497
  15. 反序列化boolean类型支持更多输入格式 #2493
  16. 修复部分PropertyNamingStrategy不起作用的问题 #2478 #2459
  17. 修复LinkedMultiValueMap类型反序列化结果类型不对的问题 #2489
  18. 修复反序列化Set类型报错的问题 #2475
  19. 修复JDK17模块化使用报错的问题 #2451
  20. 修复序列化java.sql.Timestamp带millis和不带millis时格式不同的问题 #2460
  21. 修复int/long类型不能识别带千分符字符串的问题 #2461
  22. 修复序列化hutool中CaseInsensitiveMap/CaseInsensitiveLinkedMap类型结果不对的问题 #2458
  23. 支持通过JSONFactory. setDefaultWriterAlphabetic全局配置保持字段顺序输出
  24. 修复序列化java.time.Period结果不对的问题 #2446
  25. 修复JSON.toJSON会导致部分Field类型丢失的问题 #2447
  26. 新增将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 2.0.49发布

14 Apr 04:18
Compare
Choose a tag to compare

这又是一个例行月度更新的BUG FIX版本,大家按需升级。

1. Issues

  1. 增强对JSONPath语法的支持 #2401 #2405
  2. 增强对Jackson Annotation的支持 #2399
  3. 增强JSONB反序列化对日期类型的不匹配类型时的处理 #2408
  4. 修复JSONB反序列化某些场景会丢失字段的问题 #2411
  5. 修复JSONType#serializeFeatures配置WriteNonStringValueAsString 不生效的问题 #2431
  6. 修复Map.Entry类型序列化WriteNonStringValueAsString不生效的问题 #2431
  7. 修复序列化ReentrantLock序列化异常的问题 #2437
  8. 修复2.0.48引入的序列化在数据较大时报writeName8Raw方法数据越界异常的问题 #2433 #2419 #2429
  9. 修复反序列化空EnumSet报错的问题 #2423
  10. 提供Redission Codec #2420 具体使用看文档
  11. 修复长度为14 key某些场景会导致数据丢失的问题 #2409
  12. 修复GraalVM报错的问题 #2406
  13. 修复kotlin jdk 21.0.2 情况下JSONWriter.Feature.WriteEnumsUsingName不生效的问题 #2276
  14. 修复反序列化如果多个Key的hashCode相同时反序列化会字段丢失的问题 #2411
  15. 修复SimplePropertyPreFilter和fastjson 1.x不兼容的问题 #2384
  16. 修复反序列化不支持hutool Tree的问题 #2375
  17. 修复autoTypeFilter在某些场景不起作用的问题 #2367
  18. 修复parseArray方法不能正确处理引用的问题 #2348
  19. 修复android5版本对longValueExtract方法的兼容问题
  20. 修复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. 相关链接

4. 关于稳定性

fastjson2 core部分已经积累6925个testcase,测试覆盖率75%,每个PR合入都需要分别在JDK8/11/17/21下跑通这些testcase,不断发现问题和使用深入和更多场景有关。

fastjson 2.0.48发布

25 Mar 01:24
Compare
Choose a tag to compare

这又是一个性能优化 & Bug Fixed的版本,这个版本中,JSON.toJSONString和JSONB.toByte和JSONB.parseObject的性能有提升。

Issues

  1. 修复JSONType注解指定自定义序列化无效的问题 #2269
  2. 序列化OOM时ErrorMessage提示配置Feature.LargeObject #2331
  3. 修复使用JSONB解析带format的Timestamp类会报错的问题 #2332
  4. 修复JSONWriter.Feature.BrowserCompatible在BigDecimal带小数的大数不生效的问题 #2283
  5. 新增JSONReader.Feature.NonErrorOnNumberOverflow,数值溢出时不报错 #2305
  6. 修复Set类型反序列化报错的问题 #2302
  7. 修复Fastjson1 带 $ref 的数据在 fastjson2 无法正确反序列化的问题 #2296
  8. 增强对LocalTime日期反序列化多种格式的识别 #2310
  9. 修复LocalDateTime类型Locale不生效的问题
  10. 新增JSONWriter.Feature.SortMapEntriesByKeys,用于签名场景排序 #2318
  11. 反序列化float/double类型支持输入NaN #2309 #2300
  12. 修复枚举类型自定义反序列化类型参数为空的问题 #2329
  13. 修增JSONReader.Feature.EmptyStringAsNull,可以将空字符串转换为null #2317
  14. 修复Spring6版的FastJsonHttpMessageConverter存在问题,导致请求头不返回Content-Length #2284
  15. 修复定制序列化时属性值如果是子类会失效 #2286
  16. 修复JSONObject类型不支持输入转以后的String类型输入(兼容) #2334
  17. 修复配置JSONField(jsonDirect=true)时报错的问题 #2347
  18. 修复SupportSmartMatch全局配置无效的问题 #2349
  19. 修复泛型Class反序列化报错的问题 #2356
  20. 修复ObjectReaderCreator.createFieldReader偶发ConcurrentModificationException的问题 #2358
  21. 修复JSONField配置JSONReader.Feature.FieldBased 无效的问题 #2350
  22. 支持关闭解析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 2.0.47发布

24 Feb 02:37
Compare
Choose a tag to compare

这个版本主要是大幅度提升android版本的首次序列化/反序列化的性能。在序列化大于1M的JSON对象时性能也有了较大提升。

Issues

  1. 在非android版本某些Android设备上处理数据时崩溃 #2263
  2. JSONField Annotation defaultValue配置支持Enum #2239
  3. 修复反序列化List类型字段输入null时报错的问题 #2233
  4. 修复反序列化时JSON.toJavaObject方法有错误识别setter方法的问题 #2230
  5. 修复引用类型、Boolean、Short 不支持JSONWriter.Feature.WriteNulls #2234
  6. 修复序列化kotlin data cass调用copy方法的问题 #2231
  7. 修复有些场景JSON.isValid方法抛异常的问题 #2222
  8. 修复JSONPath不支持中划线的问题 #2228
  9. 提升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 2.0.46发布

29 Jan 12:39
Compare
Choose a tag to compare

这又是一个BUG FIX版本,大家按需升级。这个版本在android 4 ~ android 33上性能有了非常大的提升。

Issues

  1. 修复JSONB反序列化skip不存在int类型字段某些场景报错的问题 #1257
  2. 修复JSONB反序列化自定义异常类的List类型变量赋值为null时报错的问题 #2181
  3. 修复反序列化某些场景不兼容fastjson 1.x "new Date(millis)"的格式 #2087
  4. 修复jdk module功能启用后package重复的问题 #2176
  5. 修复某些场景下序列化数组类型不正确的问题 #2175
  6. 修复toJSON不能识别循环引用的问题 #2187
  7. 修复JSONPath exists函数不支持多级表达式的问题 #2190
  8. 修复反序列化double结束为\r\n等转义时报错的问题 #2164
  9. 修复不兼容日期格式yyyy-MM-dd hh:mm:ss的问 #2199
  10. 修复不兼容日期格式yyyy-MM-dd'T'HH:mm:ssXXX的问题#2206
  11. 修复当 Double 字段为 null时。开启 WriteNullNumberAsZero 和 WriteLongAsString,会变成 "0"的问题 #2211
  12. 修复不兼容jackson的Annotation JsonDeserialize#contentUsing的问题 #2217
  13. 修复List字段JSONField#deserializeUsing不起作用的问题 #2213
  14. 修复java.sql.Struct类型序列化报错的问题 #2205
  15. 修复某些场景引用检测不起作用的问题 #2180
  16. 修复JSONWriter.Feature.BrowserCompatible 导致 LocalDateTime 类型Map Key未按预期格式进行格式化处理 #2183
  17. 修复序列化不会忽略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 2.0.45发布

07 Jan 03:27
Compare
Choose a tag to compare

这又是一个BUG FIX版本,大家按需升级

Issues

  1. 修复JSONPath对JSONB格式支持不完整的问题 #2138
  2. 修复fastjson2-extension module-info配置不对的问题 #1923
  3. 修复数字大约38位时导致负数结果为整数的问题 #2128
  4. 修复引用解析结果不对的问题 #2140
  5. 修复JSONPath.set在某些场景会空指针的问题 #2145
  6. 修复JSONPath在某些场景结果会重复的问题 #2143
  7. 修复解析错误格式数据不报错问题 #2155
  8. 修复在继承子类序列化在某些场景报类型转换错误的问题 #2153 #1942
  9. 修复某些场景反序列化解析引用报错的问题 #2148
  10. 修复某些场景序列化引用计算不对导致序列化层数过多报错的问题 #2144
  11. 修复none-public enum配置JSONField(value=true)不起作用的问题 #2154
  12. 修复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>

相关链接