2

我有一个记录列表:

{
  "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"));

这甚至可能吗?

4

3 回答 3

1

解决方案:

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

于 2019-03-05T14:24:48.067 回答
1

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

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

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

于 2018-10-18T17:06:13.623 回答
0

很难判断您是否已经解析了 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
于 2018-10-19T02:12:38.817 回答