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

使用Rest Assured Java无法定位路径,修改嵌套JSON字段失败求助

问题分析

你的问题在于Details字段的值是一个转义后的JSON字符串,而非嵌套的JSON对象。因此直接用Details.user这样的JsonPath路径无法定位到内部的user和password字段——JsonPath会把Details当作普通字符串处理,无法穿透到其内部结构。

解决方法

需要先将Details字段的字符串值解析为独立的JSON对象,修改内部字段后再序列化为转义字符串,最后替换回原JSON的Details字段。以下是调整后的代码:

ObjectMapper mapper = new ObjectMapper(); 
ObjectNode parentNode = (ObjectNode) mapper.readTree(new File(templatePath)); 

// 复用JsonPath配置,避免循环内重复创建
Configuration config = Configuration.builder()
    .jsonProvider(new JacksonJsonNodeJsonProvider())
    .mappingProvider(new JacksonMappingProvider()).build(); 

for (int i = 0; i < list.size(); i++) {
    String x = list.get(i); 
    // 最多分割为两部分,防止值中包含": "导致错误拆分
    String[] arr = x.split(": ", 2); 
    String path = arr[0].replace("|", "."); 
    String actualVal = arr.length >= 2 ? arr[1] : ""; 

    if (path.startsWith("Details.")) {
        // 处理Details内部字段的修改逻辑
        String innerPath = path.substring("Details.".length());
        
        // 1. 提取Details的字符串值并解析为JSON对象
        String detailsStr = parentNode.get("Details").asText();
        ObjectNode detailsNode = (ObjectNode) mapper.readTree(detailsStr);
        
        // 2. 修改内部字段(支持复杂路径如Details.address.city)
        JsonPath.parse(detailsNode, config).set(innerPath, actualVal);
        
        // 3. 将修改后的内部对象序列化为带转义的字符串
        String newDetailsStr = mapper.writeValueAsString(detailsNode);
        
        // 4. 替换回原父节点的Details字段
        parentNode.put("Details", newDetailsStr);
    } else {
        // 处理普通字段的修改
        JsonPath.parse(parentNode, config).set(path, actualVal);
    }
}

// 若需要将修改后的JSON写入文件,可添加以下代码
// mapper.writeValue(new File(outputPath), parentNode);
关键调整说明
  1. 分割逻辑优化:使用split(": ", 2)确保值中包含: 时不会被错误分割。
  2. 嵌套JSON处理:针对以Details.开头的路径,单独解析内部JSON字符串,修改后重新序列化。
  3. 配置复用:将JsonPath配置移出循环,避免重复创建提升性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:52:43