gpt4 book ai didi

java - Jackson反序列化列表,跳过没有特定字段的元素

转载 作者:行者123 更新时间:2023-11-30 02:36:02 25 4
gpt4 key购买 nike

我想使用 Jackson 将 JSON 反序列化为 List<User>喜欢

class Users {
private List<User> users;
}

class User {
private Integer id;
private String name;
}

我想要:

  • id是必填字段,因此如果用户元素不包含 id,则应跳过
  • name fid 是可选的,因此如果用户元素不包含名称,则应将其包含在 null 列表中名称(如果可能的话,甚至可以使用 Java 8 可选值)

例如在下面的 JSON 中

{
"users" : [{
"id" : 123,
"name" : "Andrew"
}, {
"name" : "Bob"
}, {
"id" : 789
},
...
]
}

反序列化期间应跳过第二个用户,第三个用户应以空名称包含在列表中。可以使用 jackson 吗?

最佳答案

我认为自定义解串器可以完成如下所示的任务。

    public class UserListDeserializer extends JsonDeserializer<List<User>> {

@Override
public List<User> deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonNode node = p.readValueAsTree();
Iterator<JsonNode> it = node.elements();
List<User> userList=new ArrayList<>();
while (it.hasNext()) {
JsonNode user = it.next();
if (user.get("id") != null) {
User userObj = new User();
userObj.setId(user.get("id").intValue());
userObj.setName(user.get("name")!=null?user.get("name").textValue():null);
userList.add(userObj);
}

}
return userList;
}
}

并注释您的 Users 类,如下所示。

public class Users {
@JsonDeserialize(using=UserListDeserializer.class)
private List<User> users;
}

关于java - Jackson反序列化列表,跳过没有特定字段的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43044102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com