如何在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
相关产品推荐
相关产品推荐

