问题描述
使用 JSONPath的 set 方法 对 JSONObject 进行修改, 当修改的 key 层级大于等于3层级, 且value 为null的情况下无法修改成功.
环境信息
- OS信息: [Window11]
- JDK信息: [Openjdk 17.0.2]
- 版本信息:[Fastjson2 2.0.51]
重现步骤
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.JSONPath;
import com.alibaba.fastjson2.JSONWriter;
import org.junit.Test;
public class FastJsonBugJava {
@Test
public void commitBug(){
JSONPath of = JSONPath.of("$.a.b.name");
JSONObject jsonObject = new JSONObject();
System.out.println("before jsonObject: " + jsonObject.toJSONString(JSONWriter.Feature.WriteNulls));
of.set(jsonObject,null);
System.out.println("after jsonObject: " + jsonObject.toJSONString(JSONWriter.Feature.WriteNulls));
}
}
//输出结果为:
// before jsonObject: {}
// after jsonObject: {}
期待的正确结果
after jsonObject: {"a":{"b":{"name":null}}}
相关日志输出
输出结果为:
before jsonObject: {}
after jsonObject: {}
附加信息
同时发现, 在3层嵌套的层级下, 先set一个value不为null的key_value, 那么value为null的key_value可以修改成功.

问题描述
使用 JSONPath的 set 方法 对 JSONObject 进行修改, 当修改的 key 层级大于等于3层级, 且value 为null的情况下无法修改成功.
环境信息
重现步骤
期待的正确结果
after jsonObject: {"a":{"b":{"name":null}}}
相关日志输出
输出结果为:
before jsonObject: {}
after jsonObject: {}
附加信息
同时发现, 在3层嵌套的层级下, 先set一个value不为null的key_value, 那么value为null的key_value可以修改成功.
