Jackson 将 json 数组反序列化为单个 属性 中的一个 class
Jackson deserialize json array into single property of one class
我有一个 json 数组:
[
//...
{"name": "admin", id: 1},
//...
]
和两个名为团队的 class,简介:
class Team {
Profile profile;
}
class Profile {
String name;
long id;
}
那么,是否可以将 json 反序列化为团队列表,但 json 属性映射到 class 团队的配置文件 属性?
非常感谢你
是的,您可以像这样编写自定义反序列化器来实现:
public class TeamDeserializer extends JsonDeserializer<Team> {
@Override
public Team deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
//read the node and set fields
String name = node.get("name").asText();
int id = (Integer) ((IntNode) node.get("id")).numberValue();
//returning in required format
return new Team(new Profile(name, id));
}
}
你必须像这样使用它之前注册这个解串器:
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Team.class, new TeamDeserializer());
mapper.registerModule(module);
Team value = mapper.readValue(json, Team.class);
你可以为列表修改这个。
HTH!
我有一个 json 数组:
[
//...
{"name": "admin", id: 1},
//...
]
和两个名为团队的 class,简介:
class Team {
Profile profile;
}
class Profile {
String name;
long id;
}
那么,是否可以将 json 反序列化为团队列表,但 json 属性映射到 class 团队的配置文件 属性?
非常感谢你
是的,您可以像这样编写自定义反序列化器来实现:
public class TeamDeserializer extends JsonDeserializer<Team> {
@Override
public Team deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
//read the node and set fields
String name = node.get("name").asText();
int id = (Integer) ((IntNode) node.get("id")).numberValue();
//returning in required format
return new Team(new Profile(name, id));
}
}
你必须像这样使用它之前注册这个解串器:
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Team.class, new TeamDeserializer());
mapper.registerModule(module);
Team value = mapper.readValue(json, Team.class);
你可以为列表修改这个。
HTH!