Skip to content

[BUG] jsonObject.to(JSON.class) #2564

@Cooperzzy

Description

@Cooperzzy

问题描述

代码在fastjson兼容包和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]
  • 版本信息:[Fastjson2 2.0.50]

重现步骤

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

import java.util.Map;

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

public class MutatedIssue2516Test_176 {

    @Test
    public void test_mutated_issue() {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("key", "value");

        Object jsonObjectJavaObj1 = jsonObject.to(JSONObject.class);
        Object jsonObjectJavaObj2 = jsonObject.to(Map.class);
        Object jsonObjectJavaObj3 = jsonObject.to(JSON.class);

        System.out.println(jsonObjectJavaObj1.getClass());
        System.out.println(jsonObjectJavaObj2.getClass());
        System.out.println(jsonObjectJavaObj3.getClass());
        System.out.println();
        System.out.println(JSON.toJSONString(jsonObjectJavaObj1));
        System.out.println(JSON.toJSONString(jsonObjectJavaObj2));
        System.out.println(JSON.toJSONString(jsonObjectJavaObj3));

        assertEquals(jsonObject, jsonObjectJavaObj1);
        assertEquals(jsonObject, jsonObjectJavaObj2);
        assertEquals(jsonObject, jsonObjectJavaObj3);
    }

    @Test
    public void test_mutated_issue1() {
        com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
        jsonObject.put("key", "value");

        Object jsonObjectJavaObj1 = jsonObject.toJavaObject(com.alibaba.fastjson.JSONObject.class);
        Object jsonObjectJavaObj2 = jsonObject.toJavaObject(Map.class);
        Object jsonObjectJavaObj3 = jsonObject.toJavaObject(com.alibaba.fastjson.JSON.class);

        System.out.println(jsonObjectJavaObj1.getClass());
        System.out.println(jsonObjectJavaObj2.getClass());
        System.out.println(jsonObjectJavaObj3.getClass());
        System.out.println();
        System.out.println(com.alibaba.fastjson.JSON.toJSONString(jsonObjectJavaObj1));
        System.out.println(com.alibaba.fastjson.JSON.toJSONString(jsonObjectJavaObj2));
        System.out.println(com.alibaba.fastjson.JSON.toJSONString(jsonObjectJavaObj3));

        assertEquals(jsonObject, jsonObjectJavaObj1);
        assertEquals(jsonObject, jsonObjectJavaObj2);
        assertEquals(jsonObject, jsonObjectJavaObj3);
    }
}

相关日志输出

class com.alibaba.fastjson2.JSONObject
class com.alibaba.fastjson2.JSONObject
class jdk.proxy2.$Proxy8

{"key":"value"}
{"key":"value"}
{}

org.opentest4j.AssertionFailedError: expected: com.alibaba.fastjson2.JSONObject@1de5f259<{"key":"value"}> but was: jdk.proxy2.$Proxy8@729d991e<{"key":"value"}>
Expected :{"key":"value"}
Actual :{"key":"value"}

// in fastjson
class com.alibaba.fastjson.JSONObject
class com.alibaba.fastjson.JSONObject
class com.alibaba.fastjson.JSONObject

{"key":"value"}
{"key":"value"}
{"key":"value"}

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