You need to enable JavaScript to run this app. 如何便捷操作Java嵌套List/Map结构,在指定路径下新增属性?
优惠活动
大模型
产品
解决方案
定价
更多

如何便捷操作Java嵌套List/Map结构,在指定路径下新增属性?

解决方案

方案1:使用Apache Commons JXPath(直接操作原始Java集合对象,无需转JSON)

该库支持用类XPath路径直接读写嵌套的Map、List结构,不需要手动遍历、判断类型,可直接修改原始的嵌套集合对象。

依赖引入

<!-- Maven 依赖 -->
<dependency>
    <groupId>commons-jxpath</groupId>
    <artifactId>commons-jxpath</artifactId>
    <version>1.3</version>
</dependency>

代码示例

import org.apache.commons.jxpath.JXPathContext;
import java.util.HashMap;
import java.util.Map;

// 你拿到的原始遗留Object参数
Object rawData = 传入的原始参数;

// 1. 绑定原始对象创建JXPath上下文
JXPathContext context = JXPathContext.newContext(rawData);
// 可选配置:路径不存在时不抛出异常,避免因数据结构波动报错
// context.setLenient(true);

// 2. 构造要新增的address2对象
Map<String, String> address2 = new HashMap<>();
address2.put("uvw", "123");
address2.put("xyz", "0815");

// 3. 按指定路径直接赋值,JXPath数组索引默认从1开始,和你给出的路径规则完全匹配
context.setValue("accounting[1]/address/address2", address2);

// 此时rawData已经是修改完成的嵌套集合对象,可直接使用

方案2:借助Jackson实现(无额外依赖,适合已引入Jackson的项目)

如果项目已经集成Jackson不需要新增额外依赖,可通过Jackson的JsonPointer能力快速定位修改,最终转回嵌套Map/List结构的Java对象即可。

代码示例

import com.fasterxml.jackson.core.JsonPointer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.util.Map;

ObjectMapper objectMapper = new ObjectMapper();
// 你拿到的原始遗留Object参数
Object rawData = 传入的原始参数;

// 1. 将原始对象转换为JsonNode
ObjectNode rootNode = objectMapper.valueToTree(rawData);
// 2. 用JsonPointer定位目标节点,Jackson数组索引从0开始,accounting[1]对应索引1
ObjectNode addressNode = (ObjectNode) rootNode.at(JsonPointer.compile("/accounting/1/address"));
// 3. 新增address2字段
Map<String, String> address2 = Map.of("uvw", "123", "xyz", "0815");
addressNode.set("address2", objectMapper.valueToTree(address2));
// 4. 转回嵌套Map/List结构的Java对象
Object modifiedData = objectMapper.treeToValue(rootNode, Object.class);

两种方案都不需要手动实现遍历、类型判断逻辑,路径规则简单易维护,修改后直接得到可用的Java嵌套集合对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 15:06:07