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

时间:2018-10-18 15:20:26

标签: java groovy rest-assured-jsonpath

我有一个记录列表:

{
  "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 个答案:

答案 0 :(得分:1)

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

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

它将返回您第一次找到符合搜索条件的结果。如果您调用findAll而不是使用相同的闭包进行查找,则将具有所有匹配项的列表。

答案 1 :(得分:0)

很难判断您是否已经解析了JSON,因此我也提供了执行此操作的代码。这是普通的Groovy,而不是特定于“放心”的。

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

答案 2 :(得分:0)

解决方案:

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