-
Notifications
You must be signed in to change notification settings - Fork 541
Closed
Labels
Milestone
Description
问题描述
代码在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"}