gpt4 book ai didi

java - 将JSON反序列化为对象封装列表

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:45 25 4
gpt4 key购买 nike

因为保留像 List<String> 这样的原始类型是一个坏习惯。在应用程序中,我决定使用以下类对其进行封装:

public class EncapsulatedList {
@JsonProperty
private List<String> someWords;
/*
Some setters, getters and so on
*/
}

但它被序列化为:

{
"someWords": [
"cheese",
"random cheese",
"more random cheese"
]
}

将其作为一个简单的列表会更好,例如:

[
"cheese",
"random cheese",
"more random cheese"
]

是否有一种干净的方法可以使用 Jackson 2 来实现此目的,而不必显式地执行此操作,例如首先反序列化列表并将其放入封装类中?

最佳答案

来自 @JsonUnwrapped 的 JavaDoc :

Also note that annotation only applies if

  • Value is serialized as JSON Object (can not unwrap JSON arrays using this mechanism)

如果您不想使用 String[]List<String>直接那么你总是可以自己反序列化类型,例如:

class EncapsulatedListDeserializer extends StdDeserializer<EncapsulatedList> {
// ctor omitted
public EncapsulatedList deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
JsonNode node = p.getCodec().readTree(p);
List<String> list = new ArrayList<>();
if (node.isArray()) {
for (JsonNode value : node) {
list.add(value.asText());
}
}

return new EncapsulatedList(list);
}
}

至少在某种程度上抽象了反序列化并手动调用 setter 。

关于java - 将JSON反序列化为对象封装列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41202326/

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