我有这样的对象结构:

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());

09-25 17:37