Skip to content

[BUG]将java对象序列化为json字符串时报错,fastjson 1.2.83运行正常,fastjson2 2.0.50运行报错 #2639

@bulain

Description

@bulain

问题描述

将java对象序列化为json字符串时报错,fastjson 1.2.83运行正常,fastjson2 2.0.50运行报错

环境信息

请填写以下信息:

  • OS信息: [Windows 11]
  • JDK信息: [Oracle OpenJDK 17.0.7]
  • 版本信息:[Fastjson2 2.0.50]

重现步骤

如何操作可以重现该问题:

  1. 使用 JSON.toJSONString() 方法
  2. 输入 test.json 数据
{
  "dets": [
    {
      "fields": [
        {
          "fname": "字段A",
          "value": ""
        },
        {
          "fname": "字段B",
          "value": ""
        }
      ]
    },
    {
      "fields": [
        {
          "fname": "字段C",
          "value": ""
        },
        {
          "fname": "字段D",
          "value": ""
        }
      ]
    }
  ]
}
  1. 出现 com.alibaba.fastjson.JSONException: toJSONString error 错误
// DynPage.java
@Data
public class DynPage {
    private List<DynArea> dets;
}
// DynArea.java
@Data
public class DynArea {
    private List<DynField> fields;
}
// DynField.java
@Data
public class DynField {
    private String fname;
    private Serializable value;
}

// FastjsonTest.java
@Slf4j
class FastjsonTest {
    @Test
    @SneakyThrows
    void dynPageToJSONString() {
        ClassPathResource resource = new ClassPathResource("test.json");
        try (InputStream is = resource.getInputStream()) {
            String json = IOUtils.toString(is, StandardCharsets.UTF_8);
            DynPage data = JSON.parseObject(json, DynPage.class);
            log.info("{}", data);
            Assertions.assertNotNull(data);

            String jsonv = JSON.toJSONString(data);
            log.info(jsonv);
            Assertions.assertNotNull(jsonv);
        }
    }
}

期待的正确结果

能够正确的序列化java对象为json字符串

相关日志输出

请复制并粘贴任何相关的日志输出。

com.alibaba.fastjson.JSONException: toJSONString error

	at com.alibaba.fastjson.JSON.toJSONString(JSON.java:1527)
	at com.bulain.fastjson.FastjsonTest.dynPageToJSONString(FastjsonTest.java:60)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
Caused by: java.lang.NullPointerException: Cannot read field "child1" because "this.path" is null
	at com.alibaba.fastjson2.JSONWriter.setPath(JSONWriter.java:189)
	at com.alibaba.fastjson2.JSONWriter.writeReference(JSONWriter.java:172)
	at com.alibaba.fastjson2.writer.FieldWriterList.writeListValue(FieldWriterList.java:219)
	at com.alibaba.fastjson2.writer.OWG_1_1_DynPage.write(Unknown Source)
	at com.alibaba.fastjson.JSON.toJSONString(JSON.java:1519)
	... 4 more

附加信息

如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。

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