gpt4 book ai didi

java - 如何在java中将JSON反序列化为类Object

转载 作者:行者123 更新时间:2023-12-01 16:39:08 24 4
gpt4 key购买 nike

我正在使用 Jackson 库将 JSON 转换为类对象,但问题是答案可以是字符串或数组,例如:

数据抛出一条消息:

{
"status":"OK",
"data": "No results"
}

data 释放一个数组:

{
"status":"OK",
"data":[
{
"a":"190923114052",
"b":"",
"c":"1176225-19"
}
]
}

我的类(class)

public class ReponseWS(){
private String status;
private List<Data> data;

public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public List<Data> getData() {
return data;
}
public void setData(List<Data> data) {
this.data = data;
}
}

当数据作为字符串而不是数组出现时

错误:无法读取 JSON:无法从 VALUE_STRING token 中反序列化 java.util.ArrayList 的实例

希望能帮助我,非常感谢。

最佳答案

您可以注册com.fasterxml.jackson.databind.deser.DeserializationProblemHandler并实现handleUnexpectedToken方法。如果预期类型为 ArrayList 且 JsonToken 为 VALUE_STRING ,您始终可以返回新的 ArrayList 对象:

ObjectMapper mapper = JsonMapper.builder()
.addHandler(new DeserializationProblemHandler() {
@Override
public Object handleUnexpectedToken(DeserializationContext ctxt, JavaType targetType, JsonToken t, JsonParser p, String failureMsg) throws IOException {
if (targetType.getRawClass() == ArrayList.class && t == JsonToken.VALUE_STRING) {
return new ArrayList<>();
}
return super.handleUnexpectedToken(ctxt, targetType, t, p, failureMsg);
}
})
.build();

关于java - 如何在java中将JSON反序列化为类Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61899967/

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