Android 如何使用GSON解析嵌套的JSON

Android 如何使用GSON解析嵌套的JSON,android,json,gson,android-volley,Android,Json,Gson,Android Volley,我目前正在使用volley发出一个get请求,在onResponse中,我试图使用gson将jsonObject解析到我的模型中 发出请求后返回的JSON: { "success": 1, "message": "Done", "data": { "company": "companyname", "email": "email", "color": "#ffffff", "

我目前正在使用volley发出一个get请求,在onResponse中,我试图使用gson将jsonObject解析到我的模型中

发出请求后返回的JSON:

{
   "success": 1,
   "message": "Done",
   "data": {
             "company": "companyname",
             "email": "email",
             "color": "#ffffff",
             "text_color": "#000000",
             "background_image": "BITMAP ENCODED",
             "logo": "BITMAP ENCODED",
             "enable_health_and_safety": 0,
             "health_and_safety": "",
             "sign_in_button_text": "SIGN IN",
             "sign_out_button_text": "SIGN OUT",
             "enable_picture": 0,
             "package_type": "TRIAL",
             "created_at": "2017-03-06 12:21:23",
             "updated_at": "2017-03-06 12:21:23",
             "telephone": "",
             "auto_sign_out": 0,
             "sign_out_time": "",
             "enable_printing": 0
          }
}
我的模型

public class ClientResponseModel implements Serializable {
private String success;
private String message;
private ClientData clientData;

public String getSuccess() {
    return success;
}

public void setSuccess(String success) {
    this.success = success;
}

public String getMessage() {
    return message;
}

public void setMessage(String message) {
    this.message = message;
}

public ClientData getClientData() {
    return clientData;
}

public void setClientData(ClientData clientData) {
    this.clientData = clientData;
}

public class ClientData implements Serializable {
    private String company;
    private String email;
    private String client_color;
    private String text_color;
    private String background_image;
    private String logo;
    private int enable_health_and_safety;
    private String health_and_safety;
    private String sign_in_button_text;
    private String sign_out_button_text;
    private int enable_picture;
    private String package_type;
    private String created_at;
    private String updated_at;
    private String telephone;
    private int auto_sign_out;
    private String sign_out_time;
    private int enable_printing;

    //all the getters and setters for above 
}
我的onResponse函数

final JsonObjectRequest getClientData = new JsonObjectRequest(Request.Method.GET, clientUrl, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            Log.i("getUserDataOnResponse", response.toString());
            Gson gson = new Gson();
            ClientResponseModel clientResponseModel = gson.fromJson(response.toString(), ClientResponseModel.class);


            Log.i("sucess",clientResponseModel.getSuccess());
            Log.i("message",clientResponseModel.getMessage());
            Log.i("company",clientResponseModel.getClientData().getEmail());

        }
我不确定我可能做错了什么,例如,我已经查看了几个链接


提前感谢您的帮助。

我有一个非常简单的方法:

首先,创建主模型: 另一个是“数据”

//为变量创建getter和setter

然后,当您得到json时,按如下方式解析它:

            Gson gson = new Gson();
            Type CollectionType = new TypeToken<FeedBackModel>() {
            }.getType();
            FeedBackModel FeedBack = gson.fromJson(json, CollectionType);
Gson-Gson=new-Gson();
Type CollectionType=new-TypeToken(){
}.getType();
FeedBackModel FeedBack=gson.fromJson(json,CollectionType);

我有一个非常简单的方法:

首先,创建主模型: 另一个是“数据”

//为变量创建getter和setter

然后,当您得到json时,按如下方式解析它:

            Gson gson = new Gson();
            Type CollectionType = new TypeToken<FeedBackModel>() {
            }.getType();
            FeedBackModel FeedBack = gson.fromJson(json, CollectionType);
Gson-Gson=new-Gson();
Type CollectionType=new-TypeToken(){
}.getType();
FeedBackModel FeedBack=gson.fromJson(json,CollectionType);

您的代码中有一点错误。因此您应该将ClientData ClientData更改为ClientData。然后您可以获取数据。希望这将有助于您进行分析。

您的代码中有一个小错误。因此,您应该将ClientData ClientData更改为ClientData。然后您可以获得数据。希望这将有助于您解析。

如用户1912026所述,更改如下

private ClientData data;
并更改setter和getter,如下所示

public ClientData getClientData() {
    return data;
}

public void setClientData(ClientData clientData) {
    this.data = clientData;
}

如user1912026所述,更改如下

private ClientData data;
并更改setter和getter,如下所示

public ClientData getClientData() {
    return data;
}

public void setClientData(ClientData clientData) {
    this.data = clientData;
}

JSONObject response
然后
gson.fromJson(response.toString()…
解析json两次…真是浪费资源谢谢你的评论,首先我是学习者,错误地学习,所以我接受你的建议,并将使我的代码更好,其次,留下的评论可以是帮助精神而不是批评,如果留下评论,请留下一个答案,就像你会做的那样,所以至少其他pe人们可以学习。@Selvintry
@SerializedName(“数据”)@Expose private ClientData ClientData;
否则您将不得不对每个字段使用注释hi@PavneetSingh谢谢您的评论,如前所述,我只是在学习。就我所知,请您解释一下我如何实现它。我将在哪里实现Expose private ClientData ClientData;?我说得对吗SerializeName(“data”)位于专用ClientData ClientData之上;而Expose语句将位于ClientData类之上?
\n
表示输入
@SerializedName(“data”)\n@Expose\n private ClientData ClientData;
,我不确定它是否能工作
JSONObject response
然后
gson.fromJson(response.toString()…
解析json两次…真是浪费资源谢谢你的评论,首先我是学习者,错误地学习,所以我接受你的建议,并将使我的代码更好,其次,留下的评论可以是帮助精神而不是批评,如果留下评论,请留下一个答案,就像你会做的那样,所以至少其他pe人们可以学习。@Selvintry
@SerializedName(“数据”)@Expose private ClientData ClientData;
否则您将不得不对每个字段使用注释hi@PavneetSingh谢谢您的评论,如前所述,我只是在学习。就我所知,请您解释一下我如何实现它。我将在哪里实现Expose private ClientData ClientData;?我说得对吗SerializeName(“data”)位于专用ClientData ClientData之上;而Expose语句将位于ClientData类之上?
\n
表示输入
@SerializedName(“data”)\n@Expose\n private ClientData ClientData;
,我不确定它是否有效