diff --git a/core/src/main/java/com/alibaba/fastjson2/reader/FieldReaderObject.java b/core/src/main/java/com/alibaba/fastjson2/reader/FieldReaderObject.java index ed962ac60..b857996ef 100644 --- a/core/src/main/java/com/alibaba/fastjson2/reader/FieldReaderObject.java +++ b/core/src/main/java/com/alibaba/fastjson2/reader/FieldReaderObject.java @@ -123,6 +123,7 @@ public class FieldReaderObject Object value; try { + char first = jsonReader.current(); if (jsonReader.nextIfNullOrEmptyString()) { if (defaultValue != null) { value = defaultValue; @@ -135,7 +136,7 @@ public class FieldReaderObject } else if (fieldClass == Optional.class) { value = Optional.empty(); } else { - value = null; + value = first == 'n' ? null : ""; } } else if (jsonReader.jsonb) { if (fieldClass == Object.class) { diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_3500/Issue3537.java b/core/src/test/java/com/alibaba/fastjson2/issues_3500/Issue3537.java new file mode 100644 index 000000000..3eead13cb --- /dev/null +++ b/core/src/test/java/com/alibaba/fastjson2/issues_3500/Issue3537.java @@ -0,0 +1,39 @@ +package com.alibaba.fastjson2.issues_3500; + +import com.alibaba.fastjson2.JSON; +import org.junit.jupiter.api.Test; + +import java.util.Collections; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +public class Issue3537 { + @Test + public void test() { + String json = "{\"value\":\"\"}"; + SimpleTestValue s = JSON.parseObject(json, SimpleTestValue.class); + assertEquals("", s.getValue()); + json = "{\"value\":null}"; + s = JSON.parseObject(json, SimpleTestValue.class); + assertNull(s.getValue()); + } + + public static class SimpleTestValue { + private Object value; + + // 标准 getter/setter + public Object getValue() { + return value; + } + public void setValue(Object value) { + this.value = value; + } + + // 自定义 getter 会导致问题 + public List getRelates() { + return Collections.emptyList(); + } + } +}