如何使用 rest Assured 从 api 响应中过滤值

问题描述 投票:0回答:1

我有一个响应 json,如下所示。我在一个数组中有多个嵌套的 json,其中包含特定频道上的支出详细信息。我只需要获得“EMAIL”的花费值。我怎样才能检查它是 EMAIL 的条件只获得那个值?

{
  "receiver": "[email protected]",
  "scopeID": "5a06aec1-2b3b-4b0a-af57-c438a02de855",
  "communicationPolicy": [
    {
      "type": "COMMUNICATION_TYPE",
      "rules": [
        {
          "key": "TRANSACTIONAL",
          "value": [
            {
              "channel": "EMAIL",
              "value": false
            },
            {
              "channel": "SMS",
              "value": false
            },
            {
              "channel": "SPOTLIGHT",
              "value": true
            },
            {
              "channel": "INBOX",
              "value": true
            }
          ]
        },
        {
          "key": "ACCOUNT_SETTINGS",
          "value": [
            {
              "channel": "EMAIL",
              "value": false
            },
            {
              "channel": "SMS",
              "value": false
            },
            {
              "channel": "SPOTLIGHT",
              "value": true
            },
            {
              "channel": "INBOX",
              "value": true
            }
          ]
        },
        {
          "key": "CARD_MANAGEMENT",
          "value": [
            {
              "channel": "EMAIL",
              "value": false
            },
            {
              "channel": "SMS",
              "value": false
            },
            {
              "channel": "SPOTLIGHT",
              "value": true
            },
            {
              "channel": "INBOX",
              "value": true
            }
          ]
        },
        {
          "key": "CARD_CONTROLS",
          "value": [
            {
              "channel": "EMAIL",
              "value": false
            },
            {
              "channel": "SMS",
              "value": false
            },
            {
              "channel": "SPOTLIGHT",
              "value": true
            },
            {
              "channel": "INBOX",
              "value": true
            }
          ]
        }
      ]
    }
  ]
}

我正在使用 JsonPath

JsonPath.from(response.asString()).getList("communicationPolicy.rules findAll{it.channel == 'EMAIL'}.value");

但是得到空值,那么使用 find{} 或 findAll{} 的正确方法是什么。

这里我需要有两个条件,其中

key == "TRANSACTIONAL"
获取值并在该值数组/列表中获取
channel == "Email"
的值。所以应该有两个条件。

json rest-assured rest-assured-jsonpath
1个回答
0
投票

你的json是多重嵌套数组

所以我认为 JsonPath jayway 在这种情况下是更好的选择。

List<?> values = com.jayway.jsonpath.JsonPath.read(response, "$.communicationPolicy..rules[?(@.key == 'TRANSACTIONAL')].value[?(@.channel == 'EMAIL')].value");
System.out.println(values);

如果你仍然想要 GPath,那就在这里。我使用

flatten()
将 2D 阵列制作成 1D 阵列
[[xxx]]
-->
[xxx]

List<?> value = JsonPath.from(response).get("communicationPolicy.rules.flatten().findAll {it.key == 'TRANSACTIONAL'}.value.flatten().findAll {it.channel == 'EMAIL'}.value");
System.out.println(value);
© www.soinside.com 2019 - 2024. All rights reserved.