我有以下形式的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使用
将整数用于长值mapper.configure(DeserializationFeature.USE_LONG_FOR_INTS, true);
2。使用包装器类Long代替POJO中的long
有人可以帮我吗?
答案 0 :(得分:2)
您可以为该对象使用const playersByTeam = teamsAndPlayers.find(({ team }) => team === selectedTeam).players
<select id="players" name="players">
{ playersByTeam.map(player => <option key={player>{ player }</option>) }
</select>
形状。您可以使用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());
}
}
答案 1 :(得分:1)
您的json没有映射到您定义的pojo。对于您定义的pojo,json应该采用以下形式。
{
"time:1232324343,
"a":"A",
"b":"B",
"status":3333,
"c":"E"
}