Java 8 的简单 JSON 值解析
Simple JSON value parsing for Java 8
Java 8 这里虽然我的类路径上已经有 Jackson 和 Jettison(作为依赖项)。
我得到以下 JSON 字符串(作为示例):
{
"widgets": {
"email": "someone@example.com",
"maxSize": 50
},
"environments": {
"LOCAL": {
"maxSize": "40"
},
"DEV": {
"maxSize": "100"
}
},
"fruits": [
"apples",
"oranges"
]
}
在运行时,字段的值会有所不同。
我只是想从这个字符串中读取 environments/DEV/maxSize
的值;我可以编写的提取此值的最简单代码是什么?
理想情况下,Java8 可能会内置一些支持此类功能的功能,但如果需要注意的话,我希望 Jackson 或 Jettison 能够提供此功能,而无需添加新的 jar/dependency到我的项目。最坏的情况就是使用某种正则表达式去除我认为的值...
有什么想法吗?
一个简单的选择是使用 JsonPath
。可以使用 $.environments.DEV.maxSize
:
等路径说明符提取嵌套属性
long maxSize = JsonPath.parse(json).read("$.environments.DEV.maxSize", Long.class);
对于 Jackson,这可以通过 JsonNode
:
来完成
long maxSize = new ObjectMapper()
.readTree(json)
.get("environments").get("DEV").get("maxSize").asLong();
或者如果您有一个代表数据的 class,您可以反序列化为:
MyConfig myConfig = new ObjectMapper().readValue(json, MyConfig.class);
long maxSize = myConfig.getEnvironments().get(Environment.DEV).getMaxSize();
Java 8 这里虽然我的类路径上已经有 Jackson 和 Jettison(作为依赖项)。
我得到以下 JSON 字符串(作为示例):
{
"widgets": {
"email": "someone@example.com",
"maxSize": 50
},
"environments": {
"LOCAL": {
"maxSize": "40"
},
"DEV": {
"maxSize": "100"
}
},
"fruits": [
"apples",
"oranges"
]
}
在运行时,字段的值会有所不同。
我只是想从这个字符串中读取 environments/DEV/maxSize
的值;我可以编写的提取此值的最简单代码是什么?
理想情况下,Java8 可能会内置一些支持此类功能的功能,但如果需要注意的话,我希望 Jackson 或 Jettison 能够提供此功能,而无需添加新的 jar/dependency到我的项目。最坏的情况就是使用某种正则表达式去除我认为的值...
有什么想法吗?
一个简单的选择是使用 JsonPath
。可以使用 $.environments.DEV.maxSize
:
long maxSize = JsonPath.parse(json).read("$.environments.DEV.maxSize", Long.class);
对于 Jackson,这可以通过 JsonNode
:
long maxSize = new ObjectMapper()
.readTree(json)
.get("environments").get("DEV").get("maxSize").asLong();
或者如果您有一个代表数据的 class,您可以反序列化为:
MyConfig myConfig = new ObjectMapper().readValue(json, MyConfig.class);
long maxSize = myConfig.getEnvironments().get(Environment.DEV).getMaxSize();