我有这样的对象结构:
class A {
List<B> bees;
}
class B {
String с;
}
我正在使用Gson解析器,它将此类对象序列化为以下字符串:
{"a":{"bees":[{"с":"text"}]}}
(添加根元素“ a”)
API的格式略有不同:
{"a":{"bees":[{"b":{"с":"text"}}]}}
我需要能够将此类字符串正确解析为A对象。
默认情况下,B对象(作为A的一部分)不是空的,而是空的(所有字段均为空),这是可以理解的,因为解析器在其中找不到任何字段“ b”(当它实际上是类名时)。
我正在寻找一个通用的解决方案,我有很多这样的复杂对象,并且我不想为每个对象实现许多自定义反序列化器。
Gson不是强制性的,如有必要,我可以使用另一个lib。
谢谢。
最佳答案
我更喜欢Jackson Tree Model和JDK 8 Stream来解析这样的json字符串,其核心思想是通过功能性bees
API将{"b":{"с":"text"}}
数组元素{"с":"text"}
映射到map()
。
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());