我有一个响应 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是多重嵌套数组
所以我认为 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);