Подсчитайте количество массивов и получите доступ к определенному массиву в ответе JSON, используя REST ASSURED с JAVA & Selenium - PullRequest
1 голос
/ 09 мая 2019

Я выполняю действие вызова POST через мою программу автоматизации селена, используя Rest Assured API & Java. IO получить ответ как указано ниже-

{
    "cmsContract": "HA1123",
    "groupId": "12345",
    "siteId": "4444-AP",
    "stateCountyCode": "7978790"
  },
  {
    "cmsContract": "HB2345",
    "groupId": "9876",
    "siteId": "8888-DK",
    "stateCountyCode": "111225"
  }

В ответе содержится около 1000 или более объектов JSON. И у них нет идентификатора для ответа типа «имя» или «контрактная информация»

Мой запрос: 1. Как я могу получить общее количество массивов (например, от '{' до '}'), используя API Rest Assured в сочетании с JAVA и селеном?

  1. Если бы мне пришлось получить 'stateCountyCode' для набора результатов с 'cmsContract' как HB2345, как бы я это сделал? Я хотел бы видеть возвращаемое значение как 111225

Пожалуйста, предложите.

Использованные библиотеки-

org.json.JSONObject;
io.restassured.RestAssured;
io.restassured.response.Response;
io.restassured.specification.RequestSpecification;

1 Ответ

2 голосов
/ 10 мая 2019

Вы можете использовать JsonPath для анализа ответа JSON.Как правило, вы можете получить JsonPath класс из строки, файла или ответа.

из строки:

JsonPath path = JsonPath.from("json string");

из файла:

JsonPath path = JsonPath.from(new File("path to file"));

из ответа:

Response response; //we get it from RestAssured by calling POST/GET etc
JsonPath path = response.body().jsonPath();

Чтобы получить любой элемент в структуре JSON, как и в вашем случае, мы должны предоставить его JsonPath.Пример JSON:

{ 
    "data": [
      {
         "name": "test"
      },
      {
         "name": "test1"
      }
    ]
}

Чтобы получить доступ к элементу в массиве, мы должны знать ВСЕ его родители.Структура выглядит следующим образом:

path.get("parent.child.anotherChild");

С массивами все становится сложнее, потому что мы должны использовать индексы."data" в приведенном выше примере является массивом.Для доступа к test1 мы будем использовать:

path.get("data[1].name"); //second element in the array

Но это стандартный подход.JsonPath - намного более сильная библиотека.

Наконец, чтобы ответить на ваш вопрос.Как получить количество объектов JSON в массиве?

List<HashMap<String, Object>> jsonObjects = path.getList("data"); //You have to provide name of the Array's parent. In my case, it's `data`

В приведенном выше списке HashMaps у нас есть все объекты JSON в массиве JSON.Таким образом, вы можете использовать несколько способов для подсчета элементов.

Чтобы подсчитать, сколько существует объектов JSON, вы можете просто использовать метод List:

jsonObjects.size();

С тем же списком, мы можем получить *Значение 1036 *, как в вашем примере.Ищем значение HB2345.

Стандартный for цикл.Вы можете использовать Streams, если знаете, как.

public String getStateCountryCodeFromCmsContract(String cmsContractValue) {
    for (HashMap<String, Object> singleJsonObject : jsonObjects) {
        String cmsContract = (String) singleJsonObject.get("cmsContract");
        if (cmsContract.equals(cmsContractValue)) {
            return (String) singleJsonObject.get("stateCountyCode");
        }
    }
}

Мы выполняем итерацию по каждому объекту JSON, проверяем значение элемента cmsContract, и, если оно равно желаемому значению, возвращаем stateCountryCode значение.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...