-
Notifications
You must be signed in to change notification settings - Fork 547
Closed
Labels
Milestone
Description
问题描述
和 #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]