Как получить многоуровневое значение json в Selenium - PullRequest
0 голосов
/ 06 мая 2019

У меня есть код JSON:

"ACCOUNT":  
    {
        "AmountDue": "$36,812.99",
        "OutstandingBalance": "$27,142.27",
        "StatementTotal": "$9,670.72",
        "StatementDate": "12/6/2018",
        "DueByDate": "12/23/2018",
        "AccountNumber": "5-029-5685-55"
    },

Мне нужно получить AmountDue для проверки значения портала. как получить это значение.

Я пытался использовать прямые способы,

String amountToValidate = jsonObj.ParseJson(billMeterJson, "AmountDue").toString();

Но нужно извлечь из многоуровневого кода. есть идеи. Я пробовал это, но получаю ошибку.

String amountToValidate = jsonObj.ParseJson(billMeterJson, "data.ACCOUNT[0].AmountDue").toString();

1 Ответ

0 голосов
/ 07 мая 2019

Вы можете использовать JsonPath из RestAssured. Это отличная библиотека для анализа объектов и массивов JSON.

Зависимость Maven:

<dependency>
    <groupId>io.rest-assured</groupId>
    <artifactId>json-path</artifactId>
    <version>3.3.0</version>
</dependency>

Чтобы проанализировать JSON, вы можете предоставить его как String или File. Используйте JsonPath.from() и передайте его в качестве аргумента.

Пример JSON:

{
  "data": {
    "ACCOUNT": [
      {
        "AmountDue": "$36,812.99",
        "OutstandingBalance": "$27,142.27",
        "StatementTotal": "$9,670.72",
        "StatementDate": "12/6/2018",
        "DueByDate": "12/23/2018",
        "AccountNumber": "5-029-5685-55"
      },
      {
        "AmountDue": "$40,000.00",
        "OutstandingBalance": "$27,142.27",
        "StatementTotal": "$9,670.72",
        "StatementDate": "12/6/2018",
        "DueByDate": "12/23/2018",
        "AccountNumber": "5-029-5685-55"
      }
    ]
  }
}

Давайте прыгнем в код:

        JsonPath path = JsonPath.from("{\r\n" + 
                "  \"data\": {\r\n" + 
                "    \"ACCOUNT\": [\r\n" + 
                "      {\r\n" + 
                "        \"AmountDue\": \"$36,812.99\",\r\n" + 
                "        \"OutstandingBalance\": \"$27,142.27\",\r\n" + 
                "        \"StatementTotal\": \"$9,670.72\",\r\n" + 
                "        \"StatementDate\": \"12/6/2018\",\r\n" + 
                "        \"DueByDate\": \"12/23/2018\",\r\n" + 
                "        \"AccountNumber\": \"5-029-5685-55\"\r\n" + 
                "      },\r\n" + 
                "      {\r\n" + 
                "        \"AmountDue\": \"$40,000.00\",\r\n" + 
                "        \"OutstandingBalance\": \"$27,142.27\",\r\n" + 
                "        \"StatementTotal\": \"$9,670.72\",\r\n" + 
                "        \"StatementDate\": \"12/6/2018\",\r\n" + 
                "        \"DueByDate\": \"12/23/2018\",\r\n" + 
                "        \"AccountNumber\": \"5-029-5685-55\"\r\n" + 
                "      }\r\n" + 
                "    ]\r\n" + 
                "  }\r\n" + 
                "}");
        System.out.println(path.getString("data.ACCOUNT[1].AmountDue"));

Мы создаем JsonPath из String (его не нужно форматировать). Затем мы используем метод path.getString(), чтобы получить желаемое значение. Если вам нужно AmountDue с первого аккаунта, вы можете просто изменить индекс.

Линия System.out.println(path.getString("data.ACCOUNT[1].AmountDue")); Отпечатки $40,000.00

Если я поменяю его на System.out.println(path.getString("data.ACCOUNT[0].AmountDue"));, тогда он напечатает $36,812.99

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