当前位置: 首页 > 知识库问答 >
问题:

请放心:从JSON数组中提取值

贺玉石
2023-03-14

我正在尝试使用jsonPath从JSON数组中提取值。

JSON响应示例:

{
    "notices": [],
    "errors": [
        {
            "code": "UNAUTHORIZED"
        }
    ]
}

目前的测试如下:

@Test(dataProvider = "somePayLoadProvider", dataProviderClass = MyPayLoadProvider.class)
public void myTestMethod(SomePayload myPayload) {
    Response r = given().
            spec(myRequestSpecification).
            contentType(ContentType.JSON).
            body(myPayload).
            post("/my-api-path");

    List<String> e = r.getBody().jsonPath().getList("errors.code");
    assertEquals(e, hasItem(MyErrorType.UNAUTHORIZED.error()));
}

然而,我一直在处理我的错误代码。我只想知道它的价值。

java.lang.AssertionError: expected 
[a collection containing "UNAUTHORIZED"] but found [[UNAUTHORIZED]]

Expected :a collection containing "UNAUTHORIZED"
Actual   :[UNAUTHORIZED]

共有3个答案

华君浩
2023-03-14

显然,这只是我没有正确使用assert()方法

改变了

assertEquals(e,hasItem(MyErrorType.UNAUTHORIZED.error())

assertTrue(e.contains(MyErrorType.UNAUTHORIZED.error())

json的解析对ArrayList正确完成

向锦
2023-03-14

有了rest assured,您还可以在rest调用中执行链式断言,如下所示:

given()
  .spec(myRequestSpecification)
  .contentType(ContentType.JSON)
  .body(myPayload)
  .post("/my-api-path") //this returns Response
  .then()               //but this returns ValidatableResponse; important difference
  .statusCode(200)
  .body("notices", hasSize(0)) // any applicable hamcrest matcher can be used
  .body("errors", hasSize(1))
  .body("errors", contains(MyErrorType.UNAUTHORIZED.error()));
秦楚
2023-03-14

或者,您可以指定“errors”的数组索引来删除方括号。例如:

    List<String> e = r.getBody().jsonPath().getList("errors[0].code");

然后你可以使用“等于”而不是“包含”

 类似资料:
  • 我试图从JSON中提取值,并将其存储在String List中,因为稍后我需要检查我在csv文件中的值是否存在于此List中。 任何人都可以帮我建立一个路径来提取它吗? 现在我在我的控制台上得到了这个。**(它只返回了十个,因为我更改了“limit”参数。 我的代码直到现在: 下面您可以找到JSON结构,我只需要对象“标识符”数组中的所有“accountId”。

  • 我正在收到以下结构的响应: ] 每当我想提取JSON属性时,例如描述,最终的对象不是我所期望的。它创建具有ArrayString的列表。 如何将值从此JSON对象获取到包含值的简单列表?谢谢

  • 我得到的回应是这样的: 我有一个json回复: 我可以用放心的方法提取字符串吗?

  • 问题内容: 我以这种方式得到回应: 我在responseBody中有一个json: 是否可以仅使用此值= 39将其提取为字符串? 问题答案: 我找到了答案:) 使用JsonPath或XmlPath(如果您有XML)从响应主体获取数据。 就我而言:

  • 问题内容: 我知道它是一个数组,但是我对JSON完全陌生,需要帮助理解它的结构,这是我提取数据的尝试: 我拥有的JSON数据如下所示: 我对这些东西的掌握并不强,因此感谢所有帮助。 问题答案: 这是个主意: 它应该可以工作(如果有编译错误,请随时投诉)

  • 我得到错误:“com.google.gson.jsonSyntaxException:java.lang.IllegalStateException:Expected BEGIN_OBJECT但是BEGIN_ARRAY位于第1行column 283 path$.items.Promended[0].images” 我请求帮助从json对象提取数据。 我只需要删除类'images',并将'urls'