У меня есть JSON, как показано ниже.Требуется получить значение ключа на основе идентификатора.то есть.Допустим, если Id равен A1 , значение ключа должно возвращаться 2gAwIBAgIQKGZsKfAUzaJHVantyrwVdzANBgkqhkiG9w0BAQs .Массив ключей всегда будет содержать только один элемент.
{
"keys": [
{
"id": "A1",
"key": [
"2gAwIBAgIQKGZsKfAUzaJHVantyrwVdzANBgkqhkiG9w0BAQs"
]
},
{
"id": "A2",
"key": [
"swKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb250cm9sfsf2dew"
]
},
{
"id": "A3",
"key": [
"EyJhY2NvdW50cy5hY2Nlc3Njb250cm9sLndpbmRvd3Mubdwe2"
]
}
]
}
Для реализации вышеприведенного кода я написал приведенный ниже код с использованием потока Java8, но проблема в том, что он возвращает Optional<KeyDetails>
, что снова необходимо проанализировать и получитьзначение ключа
String keyDetails = "{\"keys\":[{\"id\":\"A1\",\"key\":[\"2gAwIBAgIQKGZsKfAUzaJHVantyrwVdzANBgkqhkiG9w0BAQs\"]},{\"id\":\"A2\",\"key\":[\"swKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb250cm9sfsf2dew\"]},{\"id\":\"A3\",\"key\":[\"EyJhY2NvdW50cy5hY2Nlc3Njb250cm9sLndpbmRvd3Mubdwe2\"]}]}";
AccessKeys accessKeys = new ObjectMapper().readValue(keyDetails, AccessKeys.class);
Optional<KeyDetails> filteredKey = accessKeys.getKeys().stream().filter(key-> key.getId().equals("A3")).findAny();
if(filteredKey.isPresent()) {
String keyValue = filteredKey.get().getKey().get(0);
System.out.println("keyValue==>"+keyValue);
}
Я хочу получить Optional<String>
вместо Optional<KeyDetails>
.то есть, если идентификатор присутствует, он должен возвращать только значение ключа, которое присутствует в массиве ключей.
Некоторые условия, которым удовлетворяет json, были:
- Иногда может возникнуть ситуациядля дублированного идентификатора ключа, в этом случае он должен выбрать только один (первый)
- Массив ключей всегда будет содержать одно строковое значение
Может кто-нибудь, пожалуйста, помогите мне в этом