Будьте уверены - извлеките одно значение из списка нескольких записей с помощью GPath - PullRequest
0 голосов
/ 18 октября 2018

У меня есть список записей:

{
  "StatusCode": 200,
  "Result": [
    {
      "Id": 15015600,
      "Amount": 97.41,
      "CreatedDate": "10/17/2018",
    },
    {
      "Id": 15015602,
      "Amount": 682.11,
      "CreatedDate": "10/17/2018",
    },
   and so on...

Я пытаюсь создать оператор для возврата значения "Id", когда я знаю Amount и CreatedDate.

int Id = given()
            .when()
                .get(/EndPoint))
            .then()
                .body("Result.findAll { it.Amount==97.41 }.CreatedDate", hasItems("10/17/2018"));

Возможно ли это вообще?

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Сложно сказать, проанализировали ли вы уже свой 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
0 голосов
/ 05 марта 2019

Решение:

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 () запрос работал как положено.

0 голосов
/ 18 октября 2018

Если у вас есть список записей в виде списка, а не в виде строки json, вы можете просто позвонить

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

Он вернет вам первый найденный результат, который соответствует условиям поиска.Если вы вызовете findAll вместо find с тем же замыканием, у вас будет список всех совпадений.

...