diff --git a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplMap.java b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplMap.java index 8e391bd230..695a4411d4 100644 --- a/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplMap.java +++ b/core/src/main/java/com/alibaba/fastjson2/writer/ObjectWriterImplMap.java @@ -674,7 +674,10 @@ public void writeWithFilter(JSONWriter jsonWriter, Object object, Object fieldNa } if (nameFilter != null) { - key = nameFilter.process(object, key, value); + String filteredKey = nameFilter.process(object, key, value); + if (filteredKey != null) { + key = filteredKey; + } } if (propertyFilter != null) { diff --git a/core/src/test/java/com/alibaba/fastjson2/issues_7000/Issue7644.java b/core/src/test/java/com/alibaba/fastjson2/issues_7000/Issue7644.java new file mode 100644 index 0000000000..587cf5714e --- /dev/null +++ b/core/src/test/java/com/alibaba/fastjson2/issues_7000/Issue7644.java @@ -0,0 +1,32 @@ +package com.alibaba.fastjson2.issues_7000; + +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.filter.NameFilter; +import org.junit.jupiter.api.Test; + +import java.util.LinkedHashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class Issue7644 { + @Test + public void testNameFilterNullReturnPreservesMapKey() { + Map map = new LinkedHashMap<>(); + map.put("aaaa", "value"); + + NameFilter nameFilter = (object, name, value) -> null; + + assertEquals("{\"aaaa\":\"value\"}", JSON.toJSONString(map, nameFilter)); + } + + @Test + public void testNameFilterReturnValueRenamesMapKey() { + Map map = new LinkedHashMap<>(); + map.put("aaaa", "value"); + + NameFilter nameFilter = (object, name, value) -> "renamed_" + name; + + assertEquals("{\"renamed_aaaa\":\"value\"}", JSON.toJSONString(map, nameFilter)); + } +}