杰克逊将json数组反序列化为一个类的单个属性

时间:2015-03-12 19:11:38

标签: java json jackson

我有一个json数组:

[
  //...
  {"name": "admin", id: 1},
   //...
]

和两个名为Team,Profile:

的类
class Team {
  Profile profile;
}

class Profile {
  String name;
  long id;
}

那么,是否可以将json反序列化为Team列表,但是json属性是否映射到Team类的profile属性?

非常感谢你。

1 个答案:

答案 0 :(得分:1)

是的,您可以通过编写自定义反序列化程序来完成此操作:

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!