Skip to content

[BUG] jsonArray.to(JSON.class) #2565

@Cooperzzy

Description

@Cooperzzy

问题描述

#2564 相似,jsonArray.to(JSON.class),代码在1.2.83中正常,在fastjson2中使用jsonObject.to(JSON.class)与fastjson有出入,JSON.toJSONString也无法按预期序列化

环境信息

  • OS信息: [MacOS 12.7.4 M1 Pro 16 GB]
  • JDK信息: [Openjdk 17.0.6]
  • 版本信息:[fastjson/fastjson2 2.0.50]

重现步骤

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import org.junit.jupiter.api.Test;

import java.util.Collection;
import java.util.List;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class MutatedIssue2516Test_176_1 {
    @Test
    public void test_mutated_issue() {
        JSONArray jsonArray = new JSONArray();
        jsonArray.add(1);

        Object jsonArrayJavaObj1 = jsonArray.to(JSONArray.class);
        Object jsonArrayJavaObj2 = jsonArray.to(Collection.class);
        Object jsonArrayJavaObj3 = jsonArray.to(List.class);
        Object jsonArrayJavaObj4 = jsonArray.to(JSON.class);

        System.out.println(jsonArrayJavaObj1.getClass());
        System.out.println(jsonArrayJavaObj2.getClass());
        System.out.println(jsonArrayJavaObj3.getClass());
        System.out.println(jsonArrayJavaObj4.getClass());
        System.out.println();
        System.out.println(JSON.toJSONString(jsonArrayJavaObj1));
        System.out.println(JSON.toJSONString(jsonArrayJavaObj2));
        System.out.println(JSON.toJSONString(jsonArrayJavaObj3));
        System.out.println(JSON.toJSONString(jsonArrayJavaObj4));

        assertEquals(jsonArray, jsonArrayJavaObj1);
        assertEquals(jsonArray, jsonArrayJavaObj2);
        assertEquals(jsonArray, jsonArrayJavaObj3);
        assertEquals(jsonArray, jsonArrayJavaObj4);
    }

    @Test
    public void test_mutated_issue1() {
        com.alibaba.fastjson.JSONArray jsonArray = new com.alibaba.fastjson.JSONArray();
        jsonArray.add(1);

        Object jsonArrayJavaObj1 = jsonArray.toJavaObject(com.alibaba.fastjson.JSONArray.class);
        Object jsonArrayJavaObj2 = jsonArray.toJavaObject(Collection.class);
        Object jsonArrayJavaObj3 = jsonArray.toJavaObject(List.class);
        Object jsonArrayJavaObj4 = jsonArray.toJavaObject(com.alibaba.fastjson.JSON.class);

        System.out.println(jsonArrayJavaObj1.getClass());
        System.out.println(jsonArrayJavaObj2.getClass());
        System.out.println(jsonArrayJavaObj3.getClass());
        System.out.println(jsonArrayJavaObj4.getClass());
        System.out.println();
        System.out.println(com.alibaba.fastjson.JSON.toJSONString(jsonArrayJavaObj1));
        System.out.println(com.alibaba.fastjson.JSON.toJSONString(jsonArrayJavaObj2));
        System.out.println(com.alibaba.fastjson.JSON.toJSONString(jsonArrayJavaObj3));
        System.out.println(com.alibaba.fastjson.JSON.toJSONString(jsonArrayJavaObj4));

        assertEquals(jsonArray, jsonArrayJavaObj1);
        assertEquals(jsonArray, jsonArrayJavaObj2);
        assertEquals(jsonArray, jsonArrayJavaObj3);
        assertEquals(jsonArray, jsonArrayJavaObj4);
    }
}

相关日志输出

  • fastjson2 2.0.50
    class com.alibaba.fastjson2.JSONArray
    class java.util.ArrayList
    class java.util.ArrayList
    class jdk.proxy2.$Proxy8

    [1]
    [1]
    [1]
    {}

    org.opentest4j.AssertionFailedError:
    Expected :[1]
    Actual :{}

  • fastjson 2.0.50
    class com.alibaba.fastjson.JSONArray
    class java.util.ArrayList
    class java.util.ArrayList
    class java.util.Collections$EmptyList

    [1]
    [1]
    [1]
    []

    org.opentest4j.AssertionFailedError:
    Expected :[1]
    Actual :[]

  • fastjson 1.2.83
    class com.alibaba.fastjson.JSONArray
    class com.alibaba.fastjson.JSONArray
    class com.alibaba.fastjson.JSONArray
    class com.alibaba.fastjson.JSONArray

    [1]
    [1]
    [1]
    [1]

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingfixed

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions