gpt4 book ai didi

java - 如何将json响应映射到pojo

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

如何使用 GSON lib 将 json 响应转换为对象(pojo)?我收到了网络服务的回复:

{"responce":{"Result":"error","Message":"description"}}

并创建 POJO

public class ErrorResponse {

private String result;
private String message;
}

但是

ErrorResponse errorResponse = (ErrorResponse) gson.fromJson(new String(responseBody), ErrorResponse.class);

出现错误

com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:需要一个字符串,但在第 1 行第 14 列为 BEGIN_OBJECT

更新

好的,我创建了

public class Wrapper {
@SerializedName("Responce")
private ErrorResponse response;
// get set
}


public class ErrorResponse {
@SerializedName("Result")
private String result;
@SerializedName("Message")
private String message;
// get set


Wrapper wrapper = (Wrapper) gson.fromJson(new String(responseBody), Wrapper.class);
ErrorResponse errorResponse = wrapper.getResponse();

最后我得到了 NPE errorResponse

最佳答案

您的 JSON 实际上是一个 JSON 对象,其中包含名为 response 的 JSON 对象。该 JSON 对象具有您的 Pojo 的格式。

因此,一种选择是在 Java 中创建该层次结构

public class Wrapper {
private ErrorResponse response;
// getters & setters
}

并反序列化它

Wrapper wrapper = (Wrapper) gson.fromJson(new String(responseBody), Wrapper.class);
ErrorResponse errorResponse = wrapper.getResponse();

另一种方法是将 JSON 解析为 JsonElement,您可以使用它来获取名为 response 的 JSON 对象并转换该对象。使用 Gson 库中的以下类型:

import com.google.gson.JsonParser;
import com.google.gson.GsonBuilder;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
//...

Gson gson = new GsonBuilder().create();
JsonParser parser = new JsonParser();
JsonElement jsonElement = parser.parse(json);
ErrorResponse response = gson.fromJson(jsonElement.getAsJsonObject().get("response"), ErrorResponse.class);
<小时/>

请注意,您的类的字段名称必须与 JSON 匹配,反之亦然。 结果结果。或者您可以使用 @SerializedName 使其匹配

@SerializedName("Response")
private String response;

关于java - 如何将json响应映射到pojo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22276168/

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