java - 如何告诉 Jackson 将子元素设为顶级元素

标签 java jackson jackson-databind

我知道如何打开 Object在 jackson ,但我找不到任何关于如何展开两层的示例。

Sharepoint API 端点返回以下格式的所有内容:

{
    "d": {
        "results": [
            {
               /* lots objects with lots of properties 
                  that are irrelevant to the question */
            }
        ]
    }
}

我尝试了以下方法,但它没有使 results评估顶级对象。

this.om.readerFor(new TypeReference<List<User>>() {})
       .withRootName("d")
       .readValue(response.parseAsString());

我怎么知道Jackson开始解析results作为顶级Array 无需创建自定义对象层次结构并且无需编写自定义反序列化器。我有一个自定义对象,它被注释为将填充,我想要 TypeSafety所以Map<String,Object>这不是我想要的。

最佳答案

可能不是最有效的方法,但可以尝试先将对象解析为树,然后导航到您需要的节点。像这样的事情:

mapper.readerFor(new TypeReference<List<User>>() {}).readValue(mapper.readTree(json).get("d").get("results"))‌​;

更容易阅读:

mapper.convertValue(mapper.readTree(json).get("d").get("‌​results"), new TypeReference<List<User>>() {});

关于java - 如何告诉 Jackson 将子元素设为顶级元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46307665/

相关文章:

java - 我的应用违反了站点行为 : Navigation and i don't knew why?

java - 从文件中读取两位数并避免空格/字符串 (Java)

java - Jackson:对于给定的 Map<String, Class<?>> 将 json 解析为 Map<String, Object>

java - RestTemplate映射页面 'Page size must not be less than one'

java - 如何在不陷入无限反序列化循环的情况下反序列化与渴望双方的一对多关系

spring - 如何在不继承 spring-boot-starter-web 的情况下在 Spring Boot 中获取 ObjectMapper 实例?

java - 如何在标准输出中禁用 Spring Boot Logo ?

java - 为什么可以将匿名类的实例分配给接口(interface)变量?

java - Jackson - 使用 Builder 进行反序列化,无需注释

java - 无法理解 ObjectMapper writeValueAsString(Object value) 方法行为