如何将json响应映射到pojo

时间:2014-03-08 23:01:02

标签: java android json mapping gson

如何使用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

2 个答案:

答案 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添加到项目中。