如何使用GSON lib将json响应转换为object(pojo)?我收到了来自webservice的回复:
{"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
UPD
好的,我创建了
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
答案 0 :(得分:1)
您的JSON实际上是一个包含名为response
的JSON对象的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匹配,反之亦然。 result
vs Result
。或者您可以使用@SerializedName
使其匹配
@SerializedName("Response")
private String response;
答案 1 :(得分:0)
您可以使用jsonschema2pojo在线POJO生成器在GSON库的帮助下从JSON文档或JSON模式生成POJO类。在注释风格'部分,选择GSON。创建zip文件后,将其解压缩并将所有类添加到类路径中。 注意:您需要将GSON jar添加到项目中。