Java8的简单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": {

这里有Java8,但我已经将Jackson和抛弃作为依赖项放在了我的类路径上

我得到了以下JSON字符串作为示例:

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