Simple JSON value parsing for Java 8

282 Views Asked by At

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": "[email protected]",
        "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

There are 1 best solutions below

4
jspcal On BEST ANSWER

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();