1

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从这个字符串中读取值;我能写出什么最简单的代码来提取这个值?

理想情况下,可能有一些内置的 Java 8 支持这种类型的东西,但如果注意的话,我希望 Jackson 或 Jettison 提供这种功能,而不必向我的项目添加新的 jar/依赖项。最坏的情况就是使用某种正则表达式来去除我认为的值......

有任何想法吗?

4

1 回答 1

4

一个简单的选择是使用JsonPath. 可以使用如下路径说明符拉取嵌套属性$.environments.DEV.maxSize

long maxSize = JsonPath.parse(json).read("$.environments.DEV.maxSize", Long.class);

对于杰克逊,这可以通过以下方式完成JsonNode

long maxSize = new ObjectMapper()
    .readTree(json)
    .get("environments").get("DEV").get("maxSize").asLong();

或者,如果您有一个代表数据的类,您可以反序列化为:

MyConfig myConfig = new ObjectMapper().readValue(json, MyConfig.class);
long maxSize = myConfig.getEnvironments().get(Environment.DEV).getMaxSize();
于 2019-04-08T21:11:31.770 回答