放心 - 从使用 GPath 的多条记录列表中提取单个值

我有一个记录列表:


{

  "StatusCode": 200,

  "Result": [

    {

      "Id": 15015600,

      "Amount": 97.41,

      "CreatedDate": "10/17/2018",

    },

    {

      "Id": 15015602,

      "Amount": 682.11,

      "CreatedDate": "10/17/2018",

    },

   and so on...

当我知道 Amount 和 CreatedDate 时,我正在尝试编写一个语句来返回“Id”值。


int Id = given()

            .when()

                .get(/EndPoint))

            .then()

                .body("Result.findAll { it.Amount==97.41 }.CreatedDate", hasItems("10/17/2018"));

这甚至可能吗?


SMILET
浏览 155回答 3
3回答

互换的青春

如果您将记录列表作为列表,而不是作为 json 字符串,则可以调用def id = YourResponse.Result.find{it.Amount==97.41 && it.CreatedDate=="10/17/2018"}它将返回与您的搜索条件匹配的第一个找到的结果。如果您使用相同的闭包调用 findAll 而不是 find ,您将获得所有匹配项的列表。

慕莱坞森

解决方案:int i = response.path("Result.find{it.Amount.toDouble()==293.51 && it.CreatedDate=='10/26/2018'}.Id");我需要在我的查询中添加“toDouble()”。it.Amount.toDouble()==293.51,不是 it.Amount==293.51。添加 toDouble() 后,查询按预期工作。

ibeautiful

很难判断您是否已经解析了 JSON,因此我也包含了代码来执行此操作。这是普通的 Groovy,而不是特定于 Rest Assured。import groovy.json.JsonSlurperdef text = '''{  "StatusCode": 200,  "Result": [    {      "Id": 15015600,      "Amount": 97.41,      "CreatedDate": "10/17/2018",    },    {      "Id": 15015602,      "Amount": 682.11,      "CreatedDate": "10/17/2018",    }   ]}'''def json = new JsonSlurper().parseText(text)assert json.Result.find{ it.Amount == 97.41 && it.CreatedDate == '10/17/2018' }.Id == 15015600
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java