Skip to content

[BUG]在使用fastjson2中的set方法设置匹配上JSONPATH的值时发现,如果JSONPATH匹配出的结果是一个数组,则无法完成value的替换 #3375

@Jackie-guan-0

Description

@Jackie-guan-0

问题描述

在使用fastjson2中的set方法设置匹配上JSONPATH的值时发现,如果JSONPATH匹配出的结果是一个数组,则无法完成value的替换。
报文如下:
{
"name": "",
"value": [
{
"id": "101",
"additionalProperty": [
{
"token": "token1"
},
{
"token": "token2"
}
]
}
}
}
其中JSONPath定义为 $.value.additionalProperty[].token,需要将additionalProperty下所有的token设置为*****,因此使用fastjson2中的JSONPath.set(obj, “$.value.additionalProperty[].token”, "*******")方法进行设置,发现设置无效。

环境信息

请填写以下信息:

  • JDK信息: [e.g.:Openjdk 1.8.0_312]
  • 版本信息:[e.g.:Fastjson2 2.0.54]

重现步骤

  1. 使用 JSONPath.set(Object rootObject, String path, Object value) 方法,设置匹配上JSONPATH值的内容
  2. 输入数据如下:
    {
    "name": "",
    "value": [
    {
    "id": "101",
    "additionalProperty": [
    {
    "token": "token1"
    },
    {
    "token": "token2"
    }
    ]
    }
    }
    }
    JSONPath定义为 $.value.additionalProperty[*].token
  3. 出现错误:无法对additionalProperty中的token的value值进行替换

Image

期待的正确结果

对您期望发生的结果进行清晰简洁的描述。
additionalProperty下token中的内容会被替换成******

相关日志输出

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

附加信息

如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。
经过定位,疑似为com.alibaba.fastjson2.JSONPathSegmentName#set方法中的bug
Object object = context.parent == null ? context.root : context.parent.value;
是否应该是取context.parent.value.values字段?

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