Simple JSON value parsing for Java 8

微笑、不失礼 提交于 2020-01-14 04:00:06

问题


Java 8 here though I have Jackson and Jettison on my classpath already (as dependencies).

I am being given the following string of JSON (as an example):

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

At runtime the values of the fields will be different.

I am just trying to read the value of environments/DEV/maxSize from this string; what is the simplest code I can write to extract this value?

Ideally there might be some built in Java 8 support for this type of thing, but if note, I hopefully either Jackson or Jettison ship with this capability without having to add a new jar/dependency to my project. Worst case scenario would be just using some kind of regex to strip out the value I suppose...

Any ideas?


回答1:


A simple option would be to use JsonPath. Nested properties can be pulled using a path specifier like $.environments.DEV.maxSize:

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

With Jackson, this can be done either with JsonNode:

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

Or if you have a class that represents the data, you can deserialize to that:

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


来源:https://stackoverflow.com/questions/55581736/simple-json-value-parsing-for-java-8

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!