gpt4 book ai didi

java - 使用 Jackson 解包多个根节点而不使用包装器类

转载 作者:行者123 更新时间:2023-12-01 16:21:55 25 4
gpt4 key购买 nike

我发现有关 Jackson 的 stackoverflow 上的所有答案都只处理 JSON 的单个根节点展开,例如

{
"user":
{
"name":"Sam Smith",
"age":1
}
}

解决方案是使用包装类或使用 .withRootName("user") 调用,如下所示

User user = objectMapper.reader()
.forType(User.class)
.withRootName("user")
.readValue(string);

还可以使用@JsonRootName(value = "user")注释 User 类。

但是有没有一个选项可以不使用带有多个并行根节点的 JSON 的包装类,如下所示:

{
"user":
{
"name":"Sam Smith",
"age":1
},
"timestamp":
{
"clickpoint":"AE12",
"purchasable":"false"
}
}

。找不到解决方案。 Jackson 将引发根名称“时间戳”与预期“用户”不匹配的异常。如果您知道答案,感谢您的帮助。

最佳答案

要操作没有命名根的对象,您可以处理 JsonNode,如下例所示:

    ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.reader().readTree(source);

User user = mapper.treeToValue(node.get("user"), User.class);
Timestamp timestamp = mapper.treeToValue(node.get("timestamp"), Timestamp.class);

System.out.println(user.getName());
System.out.println(timestamp.getClickpoint());

在旧版本的 Jackson 中,您可以使用具有相同参数的 readValue(),而不是 treeToValue()

关于java - 使用 Jackson 解包多个根节点而不使用包装器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62248049/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com