java - Jackson将json数组反序列化为一个类的单个属性

标签 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属性?

非常感谢你。

最佳答案

是的,您可以通过编写自定义反序列化器来实现这一点,如下所示:

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

您可以修改列表的此项。

呵呵!

关于java - Jackson将json数组反序列化为一个类的单个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29018334/

相关文章:

java - “此操作很敏感,需要最近的身份验证。”编辑用户密码和电子邮件Android时出错-Java

python - 如何增量写入json文件

java - Jackson如何自动获取模块bean?

java - Jackson JSON 模式模块不支持 JSON 模式草案 v4 吗?

java - JSON 具有与不同数据类型的键相同的名称

java - 我们可以在 jSTL 标签中有一个可选属性取决于另一个属性吗?

java - 开发 java 文件传输应用程序的最佳方法是什么?

java - 使用 NameSpaceHandler 时 Spring bean 之间的引用

python - 将 JSONL 键与 JSON 展开为列

python - 在 Django 中自定义 JSON 序列化器