Как искать в анонимном и вложенном массиве, используя find или findAll в замыканиях groovy, используя библиотеку REST-Assured? - PullRequest
0 голосов
/ 06 июня 2019

У меня есть следующее анонимное тело ответа JSON, и мне нужно динамически анализировать вложенные массивы, чтобы получить значение ключа на основе условия, используя find или findAll в замыканиях groovy

[
{
  "children": [
    {
      "attr": {
        "reportId": "1",
        "reportShortName": "ABC",
        "description": "test,
      }
    },
   {
     "attr": {
       "reportId": "2",
       "reportShortName": "XYZ",
       "description": "test",
      }
   }
}
]

Iпробовал следующие способы и не смог получить значение ключа reportId из ответа JSON

package com.src.test.api;
import static io.restassured.RestAssured.given;
import io.restassured.path.json.JsonPath;
import io.restassured.response.Response;

public class GetReportId {
   public void getReportId(String reportName) throws Exception {
    String searchReports = "http://localhost:8080/reports";
    Response resp=given().request().when().get(searchReports).then().extract().response();
    JsonPath jsonPath = new JsonPath(resp.asString());

    String reportId1 =jsonPath.get("$.find{it.children.contains(restAssuredJsonRootObject.$.children.find{it.attr.reportShortName == 'ABC'})}.attr.reportId");
    String reportId2 = jsonPath.get("$.find{it.children.attr.reportShortName.contains(restAssuredJsonRootObject.$.children.find{it.attr.reportShortName.equals('XYZ')}.attr.reportShortName)}.attr.reportId");
    System.out.println("ReportId: " + reportId1);
  }
}

В родительском анонимном массиве может быть несколько объектов JSON, и необходимо использовать find или findAll внутриGroovy замыкания для получения reportId

Необходимо получить reportId, но, похоже, что-то не так.Любая помощь будет оценена.

...