gpt4 book ai didi

java - Jackson 反序列化混合数组

转载 作者:行者123 更新时间:2023-12-01 18:11:10 28 4
gpt4 key购买 nike

我有一个复杂的 json 字符串,我正在尝试反序列化。一个简化的示例是(我正在解析的数据比这更加嵌套):

{
"content": [
{
"value": {
"name": "name1",
"subvalue": {
"id": "id1"
}
}
},
{
"reference": "mixed"
},
{
"value": {
"name": "name2",
"subvalue": {
"id": "id2"
}
}
}
]
}

我正在尝试通过自定义反序列化器对其进行反序列化,它工作正常,除了它还用空值填充数组(我不需要的“引用”部分)。

这是我的数据类:

@JsonDeserialize(using = ResultDeserializer.class)
class ResultInfo {
public String name;
public String id;
}

我的自定义解串器:

class ResultDeserializer extends JsonDeserializer<ResultInfo> {
@Override
public ResultInfo deserialize(JsonParser jsonParser, DeserializationContext context) throws IOException, JsonProcessingException {
ResultInfo resultInfo = null;
ObjectCodec mapper = jsonParser.getCodec();
JsonNode node = mapper.readTree(jsonParser);

node = node.get("value");

if (node != null) {
resultInfo = new ResultInfo();
resultInfo.name(node.get("name").toString());
resultInfo.id(node.at("/subvalue/id").toString());
}

return resultInfo;
}

}

但是,当使用自定义反序列化器填充数组时,我在数组中得到空值:

final CollectionType collectionType =
TypeFactory
.defaultInstance()
.constructCollectionType(ArrayList.class, ResultInfo.class);

ArrayList<ResultInfo> resultInfos = null;
try {
ObjectReader reader = mapper.readerFor(collectionType);
resultInfos = reader.readValue(rootNode);
} catch (Exception e) {
Log.e(TAG, "Exception:" + e.getMessage());
}

对于反序列化,是否有相当于:

mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);

我还尝试将 @JsonInclude(Include.NON_NULL) 添加到我的数据类,但没有成功。

最佳答案

json示例无效,应该是这样的

{
"content": [
{
"value": {
"name": "name1",
"subvalue": {
"id": "id1"
}
}
},
{
"reference": "mixed"
},
{
"value": {
"name": "name2",
"subvalue": {
"id": "id2"
}
}
}
]
}

关于java - Jackson 反序列化混合数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60466575/

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