Rest Assured Java如何迭代JSON响应所有父子节点完成正确性校验
全层级JSON节点遍历实现方案
你现有代码仅遍历了根节点的直接子节点,未对对象、数组类型的子节点做递归处理,因此无法获取深层节点。可以通过递归方法兼容所有节点类型的遍历,具体实现如下:
1. 新增递归遍历方法
private void traverseJsonNode(String parentPath, JsonNode node) { // 拼接当前节点完整路径,根节点直接取字段名 String currentPath = parentPath.isEmpty() ? "" : parentPath + "."; // 处理对象类型节点 if (node.isObject()) { Iterator<String> fieldNames = node.fieldNames(); while (fieldNames.hasNext()) { String fieldName = fieldNames.next(); JsonNode childNode = node.get(fieldName); System.out.println("节点路径:" + currentPath + fieldName); System.out.println("节点值:" + childNode); // 递归遍历子节点 traverseJsonNode(currentPath + fieldName, childNode); } } // 处理数组类型节点 else if (node.isArray()) { for (int i = 0; i < node.size(); i++) { JsonNode arrayItem = node.get(i); String arrayPath = parentPath + "[" + i + "]"; System.out.println("节点路径:" + arrayPath); System.out.println("节点值:" + arrayItem); // 递归遍历数组元素 traverseJsonNode(arrayPath, arrayItem); } } // 处理值类型节点(字符串、数字、布尔、空值等叶子节点) else { // 此处可添加你的节点值校验逻辑 // 示例:org.testng.Assert.assertEquals(node.asText(), 预期值); } }
2. 替换原有遍历逻辑
你原有代码中遍历第一层节点的while循环,直接替换为递归方法调用即可:
ObjectMapper objectMapper = new ObjectMapper(); // 注意修正你原有代码里的拼写错误:reponse → response JsonNode jsonNode = objectMapper.readTree(response.asString()); // 调用递归方法,根节点初始路径为空 traverseJsonNode("", jsonNode);
效果示例
针对你给出的JSON结构,遍历后会输出所有层级的节点路径和值:
节点路径:metadata 节点值:{"msgLst":[{"code":"00","text":"SUCCESS"}]} 节点路径:metadata.msgLst 节点值:[{"code":"00","text":"SUCCESS"}] 节点路径:metadata.msgLst[0] 节点值:{"code":"00","text":"SUCCESS"} 节点路径:metadata.msgLst[0].code 节点值:"00" 节点路径:metadata.msgLst[0].text 节点值:"SUCCESS"
内容的提问来源于stack exchange,提问作者ChanGan
相关产品推荐
相关产品推荐

