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