如何使用GSON解析嵌套的JSON [英] How to parse nested JSON using GSON

查看:152
本文介绍了如何使用GSON解析嵌套的JSON的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在使用抽象获取请求,并在onResponse我想解析使用Gson jsonObject到我的模型。



JSON在请求发出后返回:

  {
success:1,
message:完成,
data:{
company:companyname,
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_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实现Serializable {
private字符串成功;
私人字符串消息;
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;
}

公共类ClientData实现Serializable {
私有字符串公司;
私人字符串电子邮件;
private String client_color;
private String text_color;
私人字符串background_image;
私有字符串标识;
private int enable_health_and_safety;
private String health_and_safety;
私人字符串sign_in_button_text;
私人字符串sign_out_button_text;
private int enable_picture;
private String package_type;
private String created_at;
私人字符串updated_at;
私人弦乐电话;
private int auto_sign_out;
私人字符串sign_out_time;
private int enable_printing;

//在
之上的所有获取者和设置者
$ / code>

My 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());

}

然而,当我试图从clientData获取数据时,例如获取e邮件。该应用程序崩溃,我收到以下错误消息。

  java.lang.NullPointerException:试图调用虚拟方法'java.lang.String ClientResponseModel $ ClientData.getEmail()'on一个空对象引用

我不确定我可能做错了什么,我曾经看过少数链接例如如何使用gson和volley parse嵌套json a>



感谢您提前提供所有帮助。

您的代码中存在一个小错误。因此,您应该将ClientData clientData更改为ClientData数据。然后你可以得到数据。希望这会帮助你解析。


I am currently making a get request using volley and in onResponse i am trying to parse the jsonObject using gson to my model.

JSON Returned after the request is made:

{
   "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
          }
}

My Model

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 
}

My onResponse function

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());

        }

I can get the success and message however when trying to get the data from clientData, Forexample getting the email. The app crashes and i get a following error message.

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String ClientResponseModel$ClientData.getEmail()' on a null object reference

I am not sure what i could be doing wrong, i have had looked at few links for example How to use gson and volley parse nested json

Thanks for all the help in advance.

解决方案

There is a little mistake in your code.So you should change ClientData clientData to ClientData data. Then you can get the data.Hope this will help you in parsing.

这篇关于如何使用GSON解析嵌套的JSON的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆