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

RestAssured匹配匿名根列表元素断言失败,如何修正JSON Path?

问题描述

接口返回的JSON数据:

[
  {"name": "a"},
  {"name": "b"}
]

使用RestAssured编写的断言代码:

given()
.get("endpoint")
.then()
.body("$.name", hasItem("b"));

运行后触发断言错误:

java.lang.AssertionError: 1 expectation failed.
    JSON path $.name doesn't match.
    Expected: (a collection containing "b")
        Actual: <[]>

尝试多种路径写法仍无法解决,问题出在哪里?

问题原因及解决办法

问题出在JSON Path路径写法错误:

  • 当接口返回的是JSON数组时,$.name无法正确提取数组内每个对象的name属性。因为$代表根节点(这里是数组),直接写$.name会尝试从根数组本身获取name字段,而数组没有这个属性,所以返回空集合<[]>,导致断言失败。

正确的路径写法有三种,任选其一即可:

  1. 直接使用name(RestAssured会自动遍历数组,提取所有元素的name字段)
given()
.get("endpoint")
.then()
.body("name", hasItem("b"));
  1. 使用$..name(递归提取所有层级的name值,适合嵌套结构,这里也能生效)
given()
.get("endpoint")
.then()
.body("$..name", hasItem("b"));
  1. 使用[*].name(明确指定遍历数组中所有元素,提取每个元素的name字段)
given()
.get("endpoint")
.then()
.body("[*].name", hasItem("b"));

上述写法都能正确提取出包含"a"和"b"的集合,让hasItem("b")断言成功通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:30:51