【问题标题】:How to get the multi level json value in Selenium如何在 Selenium 中获取多级 json 值
【发布时间】:2019-05-06 09:49:52
【问题描述】:

我有一个 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();

【问题讨论】:

  • 输出是什么?
  • 我需要将 json 中的值与网站门户值进行比较。现在它在帐户外提供时正在工作。但我需要将它用作上面提到的多级 json 解析器
  • 如果您的“账户”始终相同,您可以创建 POJO
  • 到期金额、未结余额等将在 JSON 中动态变化。
  • 你的问题不清楚。你到底想做什么?写出整个场景。这听起来与 Selenium 无关,更多的是与您在 JSON 中有一个您不知道如何提取的值有关。

标签: javascript java json selenium selenium-chromedriver


【解决方案1】:

您可以从RestAssured 使用JsonPath。这是解析 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2021-09-02
    相关资源
    最近更新 更多