RestAssured ResponseBodyExtractionOptions:如何提取JSON嵌套字段值
问题描述
我有一个接口返回如下JSON数据:
{ "fruits" : { "apple" : "green", "banana" : 99, "oranges" : "floridaBreed", "lemons" : "sicilian", "grapes" : "red", "cherries" : 12, "guava" : "sour", "tomato" : 13, "melons" : "yellow", "pomegranate" : 37 }, "isRaw" : null, "foodtype" : { "typeOne" : "non-veg", "typeTwo" : "veg" }, "isCooked" : [ ], "isReady" : [ ], "isExpired" : [ ], "isHealthy" : null, "serialnumber" : 5555, "isAvailable" : "Yes", "dietValue" : { "nutrition" : [ { "vitamin" : "yes", "vitaminValue" : 3 }, { "calcium" : "no", "calciumValue" : 0 } ] }, "isEdible" : null }
我已经编写代码获取了该响应,但无法提取嵌套字段的值。比如我能成功获取顶层字段isAvailable的值为Yes,但尝试获取grapes或calcium等值时遇到问题,请问如何通过RestAssured的ResponseBodyExtractionOptions实现这类嵌套JSON对象的过滤与字段提取?
解决方案
别担心,RestAssured的ResponseBodyExtractionOptions(通常通过then().extract()获取)提供了非常灵活的方式来提取嵌套JSON字段,核心是用路径表达式定位嵌套结构。下面针对你的场景给出具体实现示例:
1. 提取嵌套对象中的字段(比如grapes)
对于fruits对象下的grapes字段,直接用点符号逐层访问即可:
// 假设你已完成接口请求并拿到响应 ResponseBodyExtractionOptions extract = given() .when() .get("/your-target-endpoint") // 替换为你的实际接口地址 .then() .extract(); // 提取grapes的颜色值 String grapesColor = extract.path("fruits.grapes"); System.out.println(grapesColor); // 输出结果: red
2. 提取数组中的嵌套字段(比如calciumValue)
dietValue.nutrition是一个数组,要提取其中第二个元素的calciumValue,可以用索引+点符号组合定位:
// 提取nutrition数组中第2个元素的calciumValue(索引从0开始) Integer calciumValue = extract.path("dietValue.nutrition[1].calciumValue"); System.out.println(calciumValue); // 输出结果: 0
如果需要批量提取数组中同类型字段,比如所有vitaminValue,可以直接提取为集合:
List<Integer> allVitaminValues = extract.path("dietValue.nutrition.vitaminValue"); System.out.println(allVitaminValues); // 输出结果: [3, 0]
3. 其他常见嵌套场景示例
- 提取
foodtype下的素食类型:String vegFoodType = extract.path("foodtype.typeTwo"); - 提取顶层的序列号(用path统一处理顶层/嵌套字段更规范):
Integer serialNumber = extract.path("serialnumber");
关键注意点
- RestAssured的路径表达式兼容JSONPath语法,支持定位任意层级的对象、数组、嵌套数组等结构。
- 如果不确定路径是否正确,可以先用
extract().jsonPath().prettify()打印格式化后的JSON,再核对路径。 - 对于JSON中的
null值(比如isRaw),提取后会返回Java的null,记得做空指针判断。
内容的提问来源于stack exchange,提问作者Saffik
相关产品推荐
相关产品推荐

