为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

SMILET 2021-11-24 20:12:11
我有一个记录列表:{  "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"));这甚至可能吗?
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

如果您将记录列表作为列表,而不是作为 json 字符串,则可以调用

def id = YourResponse.Result.find{it.Amount==97.41 && it.CreatedDate=="10/17/2018"}

它将返回与您的搜索条件匹配的第一个找到的结果。如果您使用相同的闭包调用 findAll 而不是 find ,您将获得所有匹配项的列表。


查看完整回答
反对 回复 2021-11-24
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

解决方案:

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() 后,查询按预期工作。


查看完整回答
反对 回复 2021-11-24
?
ibeautiful

TA贡献1993条经验 获得超5个赞

很难判断您是否已经解析了 JSON,因此我也包含了代码来执行此操作。这是普通的 Groovy,而不是特定于 Rest Assured。


import groovy.json.JsonSlurper


def 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



查看完整回答
反对 回复 2021-11-24
  • 3 回答
  • 0 关注
  • 154 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信