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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:10:04