我有这样的对象结构:
class A {
List<B> bees;
}
class B {
String с;
}
我正在使用 Gson 解析器,它将此类对象序列化为该字符串:
{"a":{"bees":[{"с":"text"}]}}
(添加根元素“a”)
API 的格式有点不同:
{"a":{"bees":[{"b":{"с":"text"}}]}}
我需要能够正确地将这些字符串解析为 A 对象。
默认情况下,B 对象(作为 A 的一部分)不是 null,而是空(所有字段都为 null),这是可以理解的,因为解析器在其中找不到任何字段“b”(当它实际上是类名时)。
我正在寻找一个通用的解决方案,我有很多这样复杂的对象,我不想为每个对象实现许多自定义反序列化器。
Gson不是必需的,如果需要我可以使用另一个库。
谢谢。
最佳答案
我更喜欢 Jackson Tree Model 和 JDK 8 Stream 来解析这样的 json 字符串,其核心思想是通过函数式 map()
API 将 bees
数组元素 {"b":{"с":"text"}}
映射到 {"с":"text"}
。
ObjectMapper mapper = new ObjectMapper();
JsonNode beesNode = mapper.readTree(jsonString).get("a").get("bees");
List<JsonNode> bs = StreamSupport.stream(beesNode.spliterator(), false)
.map(bee -> bee.get("b")).collect(Collectors.toList());
关于java - Json字符串反序列化为复杂的Java对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20783426/