gpt4 book ai didi

java - 使用动态根名称反序列化 JSON

转载 作者:行者123 更新时间:2023-12-02 00:48:08 25 4
gpt4 key购买 nike

我有以下工作代码,可以反序列化 JSON 消息。如您所见,JSON 消息的根名称为“response”,我还相应地注释了 Response 类以表明这一点。然而,实际上 JSON 消息将从另一个系统接收,并且根名称可以是“响应”之外的任何名称。如何处理不同的根名称?

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.annotation.JsonTypeInfo.As;
import com.fasterxml.jackson.annotation.JsonTypeInfo.Id;
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.databind.ObjectMapper;

public class Test {

public static void main(String... args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String responseMessage =
"{" +
" \"response\" : {" +
" \"body\" : {" +
" \"country\" : \"Vietnam\"" +
" }" +
" }" +
"}";
Response response = mapper.readValue(responseMessage, Response.class);
}

}

class Body {

private String country;

public String getCountry() {
return country;
}

public void setCountry(String country) {
this.country = country;
}

}

@JsonTypeName("response")
@JsonTypeInfo(include = As.WRAPPER_OBJECT, use = Id.NAME)
class Response {

private Body body;

public Body getBody() {
return body;
}

public void setBody(Body body) {
this.body = body;
}

}

最佳答案

简单的答案是将其反序列化为 Map<String, Body> 。要手动执行此操作,您需要使用:

mapper.readValue(response, new TypeReference<Map<String, Body>>() {})

请注意,如果您使用的是像 Spring 这样的框架(通常应该如此),那么您应该让该框架为您处理序列化。

关于java - 使用动态根名称反序列化 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57881845/

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