Skip to content

[BUG]JSONPath的set方法添加3层嵌套下的key-value失败 #2656

@lllv-len

Description

@lllv-len

问题描述

使用 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可以修改成功.
Snipaste_2024-06-01_18-25-54

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