【问题标题】:How to use gson and volley parse nested json?如何使用 gson 和 volley 解析嵌套的 json?
【发布时间】:2016-02-12 04:52:26
【问题描述】:

这是我要使用的json数据:

{
     "name" : "Ravi Tamada", 
     "email" : "ravi8x@gmail.com",
     "phone" : 
      {
         "home" : "08947 000000",
         "mobile" : "9999999999"
      }

}

这是我的 JsonObjectRequest:

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, APITEST,null, new Response.Listener<JSONObject>() {

        @Override
        public void onResponse(JSONObject jsonObject) {

            Gson gson = new Gson();
            People people;
            people = gson.fromJson(jsonObject.toString(),People.class);
            tv_city.setText(""+people.email);

        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError volleyError) {



        }
    });

用 tv_city.setText(""+people.email()) 没问题...


这是我的 javabean 类:

public class People {

    public String name ;
    public String email;

    public class Phone{
        public String home;
        public String mobile;

    }

}

现在我想得到“家”号,怎么办?

【问题讨论】:

  • String homeNumber = people.phone.home;
  • 由于您是使用 Gson 解析 Json 的新手,我建议您先阅读本教程 javacodegeeks.com/2011/01/… 以获得更好的理解,然后在下面尝试我的答案。 @thirvanke

标签: android gson android-volley


【解决方案1】:

1- 您必须按如下方式更新您的 bean 类:-

public class People implements Serializable {
private String name ;
private String email;
private Phone phone;

 public Phone getPhone () {
    return phone;
}

public void setPhone (Phone phone) {
    this.phone = phone;
}
public String getName () {
    return name;
}

public void setName (String name) {
    this.name = name;
}

public String getEmail () {
    return email;
}

public void setEmail (String email) {
    this.email = email;
}}

2- 创建一个新的 bean 类 Phone.java :-

public class Phone implements Serializable{
private String home;

public String getMobile () {
    return mobile;
}

public void setMobile (String mobile) {
    this.mobile = mobile;
}

public String getHome () {
    return home;
}

public void setHome (String home) {
    this.home = home;
}

private String mobile;}

3- 现在更新您的代码如下:-

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, APITEST,null, new Response.Listener<JSONObject>() {

    @Override
    public void onResponse(JSONObject jsonObject) {

        Gson gson = new Gson();
        People people;
        people = gson.fromJson(jsonObject.toString(),People.class);
        tv_city.setText(""+people.email);
        //for getting Home & Mobile number
          String home=people.getPhone.getHome();
          String mobile=people.getPhone.getMobile();

    }
}, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError volleyError) {



    }
});

注意:- 我上面的 bean 符合您问题中预期的 api 响应。但是,如果您有嵌套对象,那么您必须在 People bean 中选择 List&lt;Phone&gt;ArrayList&lt;Phone&gt;,然后创建它的 getter 和 setter。

希望对你有帮助!!!

【讨论】:

  • 这就是我想要的......谢谢!!
【解决方案2】:

将您的 JavaBean 类替换为

public class People {

@SerializedName("name")
@Expose
private String name;
@SerializedName("email")
@Expose
private String email;
@SerializedName("phone")
@Expose

private Phone phone;

/**
* 
* @return
* The name
*/
public String getName() {
return name;
}

/**
* 
* @param name
* The name
*/
public void setName(String name) {
this.name = name;
}

/**
* 
* @return
* The email
*/
public String getEmail() {
return email;
}

/**
* 
* @param email
* The email
*/
public void setEmail(String email) {
this.email = email;
}

/**
* 
* @return
* The phone
*/
public Phone getPhone() {
return phone;
}

/**
* 
* @param phone
* The phone
*/
public void setPhone(Phone phone) {
this.phone = phone;
}

}

还有

public class Phone {

@SerializedName("home")
@Expose
private String home;
@SerializedName("mobile")
@Expose
private String mobile;

/**
* 
* @return
* The home
*/
public String getHome() {
return home;
}

/**
* 
* @param home
* The home
*/
public void setHome(String home) {
this.home = home;
}

/**
* 
* @return
* The mobile
*/
public String getMobile() {
return mobile;
}

/**
* 
* @param mobile
* The mobile
*/
public void setMobile(String mobile) {
this.mobile = mobile;
}

}

然后你可以在你的 JsonResponse 中拨打电话

JSONObject phone=jsonObject.getJSONObject("phone");

String home=phone.getHome();

将返回您的家庭号码。

希望对你有帮助:)

【讨论】:

    【解决方案3】:

    也可以像这样直接从json对象中获取数据

    if(JsonObject!=null){
    String email=JsonObject.getString("email");
    }  
    


    为了让它工作在你的模型中编写getters()和setters()对象(人物对象),你也可以自动生成它。 一旦你这样做了,就会得到这样的数据

    JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, APITEST,null, new Response.Listener<JSONObject>() {
    
            @Override
            public void onResponse(JSONObject jsonObject) {
    
                Gson gson = new Gson();
                People people;
                people = gson.fromJson(jsonObject.toString(),People.class);
                tv_city.setText(""+people.getEmail());
    
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
    
    
    
            }
        });
    

    【讨论】:

      【解决方案4】:
      JSONObject phone=jsonObject.getJSONObject("phone");
      
      String home=phone.getString("home");
      

      现在您的家庭字符串中有家庭电话号码。

      【讨论】:

      • 谢谢..我知道这种方式,但它不使用gson。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多