You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中用JsonPath向JSON数组内对象的extension添加数据

问题解决:向JSON数组内对象的属性添加字段

需求说明

现有如下JSON载荷:

{
  "Data1": "",
  "Data2": {
    "id": 1234
  },
  "Data3": [
    {
      "id": "id2",
      "price": [
        {
          "id": "id3"
        }
      ],
      "account": {
        "id": "%s"
      },
      "product": {
        "extension": {
          "sub": "R"
        }
      },
      "reason": [
        {
          "extension": {}
        }
      ],
      "produracteristic": [
        {
          "name": "gt",
          "value": "none"
        }
      ],
      "extension": {}
    }
  ],
  "Data4": [
    ....
  ]
}

需要在Data3数组内对象的extension属性下添加date: "28-08-2023",修改后该部分应为:

"extension": {
  "date":"28-08-2023"
}

原代码问题

原使用JsonPath的代码无法实现需求:

JsonPath pathToArray = JsonPath.compile("$.data3.extension");
documentContext.add(pathToArray, Collections.singletonMap("date", "28-08-2023"));

存在以下问题:

  • JSON键名大小写敏感,原路径中的data3与实际的Data3不匹配
  • Data3是数组,未指定数组内的元素位置(如第一个元素用[0]),直接取路径无法定位到目标对象
  • 向JSON对象添加属性应使用put方法,add方法主要用于向数组添加元素

修正后的代码

给数组第一个对象添加字段

// 编译正确路径:定位到Data3数组第一个元素的extension对象
JsonPath path = JsonPath.compile("$.Data3[0].extension");
// 使用put方法向该对象添加键值对
documentContext.put(path, "date", "28-08-2023");

给数组所有对象添加字段

如果需要给Data3数组内所有对象的extension都添加该字段,可使用通配符[*]:

JsonPath path = JsonPath.compile("$.Data3[*].extension");
documentContext.put(path, "date", "28-08-2023");

内容的提问来源于stack exchange,提问作者Abhijit Sarkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 00:26:16