gpt4 book ai didi

json - Jackson 将 ""反序列化为空列表

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

我有一个 JSON 字符串,将空列表标记为 ""而不是[] 。例如,如果我有一个没有子对象的对象,我将收到如下字符串:

{"id":13, "children":""}

我想将其反序列化为父类,并将子项正确设置为空的子项列表。

public class Parent {

private Long id;
private List<Child> children;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

public List<Child> getChildren() {
return children;
}

public void setChildren(List<Child> children) {
this.children = children;
}
}

对于上面的 JSON 字符串,我想要一个具有 id 的对象。设置为13 ,以及 children设置为new ArrayList<Child>()

Parent
id <- 13
children <- new ArrayList<Child>()

我会知道如何对整个类使用注释

@JsonDeserialize(using = ParentDeserializer.class)
public class Parent {
...
}

然后

public class ParentDeserializer extends JsonDeserializer<Parent> {
public Parent deserialize(JsonParser parser, DeserializationContext context) {
...
}
}

但是,我想解决从 "" 正确实例化列表的一般问题。字符串:

public class Parent {
...
// Can I get something like this?
@JsonDeserialize(using = EmptyArrayDeserializer<Child>.class)
public void setChildren(List<Child> children) {
this.children = children;
}
}

我可以得到类似的东西吗?

最佳答案

几个选项;首先,您要启用“ACCEPT_EMPTY_STRING_AS_NULL_OBJECT”:

mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);

使空字符串变为null。如果您希望将其转换为实际的空列表,请覆盖 setter :

public void setChildren(List<Child> c) {
if (c == null) {
children = Collections.emptyList();
} else {
chidlren = c;
}
}

关于json - Jackson 将 ""反序列化为空列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12933394/

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