Java8的简单JSON值解析
这里有Java8,但我已经将Jackson和抛弃作为依赖项放在了我的类路径上 我得到了以下JSON字符串作为示例:Java8的简单JSON值解析,json,java-8,jackson,jettison,Json,Java 8,Jackson,Jettison,这里有Java8,但我已经将Jackson和抛弃作为依赖项放在了我的类路径上 我得到了以下JSON字符串作为示例: { "widgets": { "email": "someone@example.com", "maxSize": 50 }, "environments": { "LOCAL": { "maxSize": "40" }, "DEV": {
{
"widgets": {
"email": "someone@example.com",
"maxSize": 50
},
"environments": {
"LOCAL": {
"maxSize": "40"
},
"DEV": {
"maxSize": "100"
}
},
"fruits": [
"apples",
"oranges"
]
}
在运行时,字段的值将不同
我只是试图从这个字符串中读取environments/DEV/maxSize的值;我可以编写什么样的最简单代码来提取这个值
理想情况下,对于这种类型的东西,可能会有一些内置的Java8支持,但是如果注意到,我希望Jackson或抛弃ship提供这种功能,而不必向我的项目添加新的jar/依赖项。最坏的情况是使用某种正则表达式去掉我想的值
有什么想法吗?一个简单的选择就是使用。可以使用路径说明符(如$.environments.DEV.maxSize)提取嵌套属性: 对于Jackson,这可以通过JsonNode完成: 或者,如果您有一个表示数据的类,则可以反序列化为:
MyConfig myConfig = new ObjectMapper().readValue(json, MyConfig.class);
long maxSize = myConfig.getEnvironments().get(Environment.DEV).getMaxSize();
一个简单的选择是使用。可以使用路径说明符(如$.environments.DEV.maxSize)提取嵌套属性: 对于Jackson,这可以通过JsonNode完成: 或者,如果您有一个表示数据的类,则可以反序列化为:
MyConfig myConfig = new ObjectMapper().readValue(json, MyConfig.class);
long maxSize = myConfig.getEnvironments().get(Environment.DEV).getMaxSize();
谢谢@jspcal+1,但我希望找到Java 8内置的东西,Jackson或Destinon作为理想的解决方案,然后寻找一些正则表达式/字符串攻击作为第二个解决方案,并且只考虑在我的类路径中添加一个新的jar依赖项,如JsonPath,作为hail mary的退路/最后手段,也许可以尝试上面提到的readTree或readValue。您可以用JSON指针示例替换Jackson版本:.readTreejson.at/environments/DEV/maxSize.asLong。请参阅:@jspcal说过,拥有自定义模型类是最好的主意。接收到的JSON是类型安全的。谢谢@jspcal+1,但我希望找到Java 8内置的东西,Jackson或抛弃作为理想的解决方案,然后寻找一些正则表达式/字符串攻击作为第二个解决方案,只考虑在我的类路径中添加一个新的jar依赖项,如JsonPath,这是一种万应/万不得已的方法。对于Jackson,可以尝试上面提到的readTree或readValue。您可以用JSON指针示例替换Jackson版本:.readTreejson.at/environments/DEV/maxSize.asLong。请参阅:@jspcal说过,拥有自定义模型类是最好的主意。对于正在接收的JSON,它是类型安全的。
MyConfig myConfig = new ObjectMapper().readValue(json, MyConfig.class);
long maxSize = myConfig.getEnvironments().get(Environment.DEV).getMaxSize();