如何在Selenium中获取多级json值

时间:2019-05-06 09:49:52

标签: javascript java json selenium selenium-chromedriver

我有一个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 :(得分:0)

您可以使用JsonPath中的RestAssured。解析JSON对象和数组的好库。

Maven依赖项:

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

为了解析JSON,您可以将其提供为StringFile。使用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(不需要格式化)。然后,我们使用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