使用 Jackson 将 Json 数组映射到 POJO

2024-02-03

我有一个以下形式的 JSON 数组:

[
 [
  1232324343,
  "A",
  "B",
  3333,
  "E"
 ],
 [
  12345424343,
  "N",
  "M",
  3133,
  "R"
 ]
]

我想使用 Jackson 库将父数组的每个元素映射到 POJO。我试过这个:

ABC abc = new ABC();
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(data).get("results");

if (jsonNode.isArray()) {
    for (JsonNode node : jsonNode) {
        String nodeContent = mapper.writeValueAsString(node);
        abc = mapper.readValue(nodeContent,ABC.class);

        System.out.println("Data: " + abc.getA());
    }
}

其中 ABC 是我的 POJO 类,abc 是对象,但出现以下异常:

com.fasterxml.jackson.databind.JsonMappingException:无法反序列化 com.demo.json.model.ABC 的实例

编辑: 我的 POJO 看起来像这样:

class ABC{
    long time;
    String a;
    String b;
    int status;
    String c;
}

有人可以为此建议一个解决方案吗?

编辑2:在咨询了StackOverflow和其他论坛上的大量答案后,我遇到了一个解决方案。我将 readValue() 方法的返回值映射到 POJO 对象数组中。

ABC[] abc = mapper.readValue(nodeContent, ABC[].class);

但现在我遇到了一个单独的异常

无法构造 ABC 的实例:没有长/长参数构造函数/工厂方法来从 Number 值反序列化 (1552572583232)

我尝试过以下方法,但没有任何效果: 1. 强制 Jackson 使用 int 来表示长值

mapper.configure(DeserializationFeature.USE_LONG_FOR_INTS, true);

2.在POJO中使用包装类Long而不是long

谁能帮我这个?


您可以使用ARRAY该对象的形状。你可以使用JsonFormat注解:

@JsonFormat(shape = Shape.ARRAY)
class ABC {

并将其反序列化:

ABC[] abcs = mapper.readValue(json, ABC[].class);

有问题的更改后进行编辑。

您的示例代码可能如下所示:

JsonNode jsonNode = mapper.readTree(json);
if (jsonNode.isArray()) {
    for (JsonNode node : jsonNode) {
        String nodeContent = mapper.writeValueAsString(node);
        ABC abc = mapper.readValue(nodeContent, ABC.class);

        System.out.println("Data: " + abc.getA());
    }
}

我们可以用convertValue方法并跳过序列化过程:

JsonNode jsonNode = mapper.readTree(json);
if (jsonNode.isArray()) {
    for (JsonNode node : jsonNode) {
        ABC abc = mapper.convertValue(node, ABC.class);
        System.out.println("Data: " + abc.getA());
    }
}

Or even:

JsonNode jsonNode = mapper.readTree(json);
ABC[] abc = mapper.convertValue(jsonNode, ABC[].class);
System.out.println(Arrays.toString(abc));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Jackson 将 Json 数组映射到 POJO 的相关文章

随机推荐