Простой анализ значения JSON для Java 8 - PullRequest
1 голос
/ 09 апреля 2019

Java 8 здесь, хотя у меня уже есть Джексон и Джеттисон на моем пути к классам (как зависимости).

Мне дают следующую строку JSON (как пример):

{
    "widgets": {
        "email": "someone@example.com",
        "maxSize": 50
    },
    "environments": {
        "LOCAL": {
            "maxSize": "40"
        },
        "DEV": {
            "maxSize": "100"
        }
    },
    "fruits": [
        "apples",
        "oranges"
    ]
}

Во время выполнения значения полей будут другими.

Я просто пытаюсь прочитать значение environments/DEV/maxSize из этой строки;какой самый простой код я могу написать, чтобы извлечь это значение?

В идеале может быть какая-то встроенная поддержка Java 8 для этого типа вещей, но, если обратите внимание, я надеюсь, что либо Джексон, либо Jettison поставят эту возможность без необходимости добавления нового jar / зависимости в мой проект.В худшем случае сценарий будет просто использовать какое-то регулярное выражение для исключения значения, которое я предполагаю ...

Есть идеи?

1 Ответ

3 голосов
/ 09 апреля 2019

Простой вариант - использовать JsonPath.Вложенные свойства можно получить с помощью спецификатора пути, например $.environments.DEV.maxSize:

long maxSize = JsonPath.parse(json).read("$.environments.DEV.maxSize", Long.class);

. С Джексоном это можно сделать либо с помощью JsonNode:

long maxSize = new ObjectMapper()
    .readTree(json)
    .get("environments").get("DEV").get("maxSize").asLong();

, либо если у вас естькласс, который представляет данные, вы можете десериализовать к этому:

MyConfig myConfig = new ObjectMapper().readValue(json, MyConfig.class);
long maxSize = myConfig.getEnvironments().get(Environment.DEV).getMaxSize();
...