2017-09-26 40 views
-1

我有一个关于GSON lib的问题。(android,JAVA)如何使用GSON实现3或4深度Json?

我的JSON数据是在这里:

{ 
    "UserID":"", 
    "Data1":{ 
     "Data1_1":[{ 
      "name":"name1", 
      "test":"test2" 
     }, 
     { 
      "name":"name2", 
      "test":"test2" 
     }], 
     "Data1_2":{ 
      "Data1_2_1":[{ 
       "addr":"addr1", 
       "phone":"phone1" 
      }, 
      { 
       "addr":"addr2", 
       "phone":"phone2" 
      }], 
      "Data1_2_2":[{ 
       "country":"country1", 
       "sex":"M" 
      }, 
      { 
       "country":"country1", 
       "sex":"F" 
      }] 
     } 
    } 
} 

我GSON对象类是在这里:

public class GsonClass { 
    public String UserID; 
    public ArrayList<Data1> Data1; 

    public class Data1 { 
     ArrayList<Data1_1> Data1_1; 
     ArrayList<Data1_2> Data1_2; 

     public class Data1_1 { 
      public String name; 
      public String test; 
     } 

     public class Data1_2 { 
      ArrayList<Data1_2_1> Data1_2_1; 
      ArrayList<Data1_2_2> Data1_2_2; 

      public class Data1_2_1 { 
       public String addr; 
       public String phone; 
      } 

      public class Data1_2_2 { 
       public String country; 
       public String sex; 
      } 
     } 
    } 
} 

但是, GSON库返回JSONParserException .. 当我测试没有Data1_2,GSON解析器好。 但是,与Data1_2。 GSON库返回异常。

如何在3或4深度JSON中设置GSON类?

+1

什么是异常消息说?你不了解它吗?你的POJO定义中真的是内部类吗?为什么? –

回答

1

试试这个。

首先,我们必须知道如何处理[]{}中的Gson

  • 如果我们在JSON找到{},我们必须在Gson使用公司Databeans。

  • 如果我们在JSON中发现[],我们必须在Gson中使用List<DataBean>

这是班级。

public class GsonClass { 

/** 
* UserID : 
* Data1 : {"Data1_1":[{"name":"name1","test":"test2"},{"name":"name2","test":"test2"}],"Data1_2":{"Data1_2_1":[{"addr":"addr1","phone":"phone1"},{"addr":"addr2","phone":"phone2"}],"Data1_2_2":[{"country":"country1","sex":"M"},{"country":"country1","sex":"F"}]}} 
*/ 

private String UserID; 
private Data1Bean Data1; 

public String getUserID() { 
    return UserID; 
} 

public void setUserID(String UserID) { 
    this.UserID = UserID; 
} 

public Data1Bean getData1() { 
    return Data1; 
} 

public void setData1(Data1Bean Data1) { 
    this.Data1 = Data1; 
} 

public static class Data1Bean { 
    /** 
    * Data1_1 : [{"name":"name1","test":"test2"},{"name":"name2","test":"test2"}] 
    * Data1_2 : {"Data1_2_1":[{"addr":"addr1","phone":"phone1"},{"addr":"addr2","phone":"phone2"}],"Data1_2_2":[{"country":"country1","sex":"M"},{"country":"country1","sex":"F"}]} 
    */ 

    private Data12Bean Data1_2; 
    private List<Data11Bean> Data1_1; 

    public Data12Bean getData1_2() { 
     return Data1_2; 
    } 

    public void setData1_2(Data12Bean Data1_2) { 
     this.Data1_2 = Data1_2; 
    } 

    public List<Data11Bean> getData1_1() { 
     return Data1_1; 
    } 

    public void setData1_1(List<Data11Bean> Data1_1) { 
     this.Data1_1 = Data1_1; 
    } 

    public static class Data12Bean { 
     private List<Data121Bean> Data1_2_1; 
     private List<Data122Bean> Data1_2_2; 

     public List<Data121Bean> getData1_2_1() { 
      return Data1_2_1; 
     } 

     public void setData1_2_1(List<Data121Bean> Data1_2_1) { 
      this.Data1_2_1 = Data1_2_1; 
     } 

     public List<Data122Bean> getData1_2_2() { 
      return Data1_2_2; 
     } 

     public void setData1_2_2(List<Data122Bean> Data1_2_2) { 
      this.Data1_2_2 = Data1_2_2; 
     } 

     public static class Data121Bean { 
      /** 
      * addr : addr1 
      * phone : phone1 
      */ 

      private String addr; 
      private String phone; 

      public String getAddr() { 
       return addr; 
      } 

      public void setAddr(String addr) { 
       this.addr = addr; 
      } 

      public String getPhone() { 
       return phone; 
      } 

      public void setPhone(String phone) { 
       this.phone = phone; 
      } 
     } 

     public static class Data122Bean { 
      /** 
      * country : country1 
      * sex : M 
      */ 

      private String country; 
      private String sex; 

      public String getCountry() { 
       return country; 
      } 

      public void setCountry(String country) { 
       this.country = country; 
      } 

      public String getSex() { 
       return sex; 
      } 

      public void setSex(String sex) { 
       this.sex = sex; 
      } 
     } 
    } 

    public static class Data11Bean { 
     /** 
     * name : name1 
     * test : test2 
     */ 

     private String name; 
     private String test; 

     public String getName() { 
      return name; 
     } 

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

     public String getTest() { 
      return test; 
     } 

     public void setTest(String test) { 
      this.test = test; 
     } 
    } 
} 
} 

并在你的代码中使用这样的代码。如何解析代码中的JSON

1.使用gson.fromJson(response,GsonClass.class);JSON转换为DataBean类。

2.使用get和set方法。像这样gsonClass.getUserID()

3.当我们在其中找到List时,我们可以使用for循环。并且它是for循环,我们可以像这样使用gsonClass.getData1().getData1_1().get(i).getName();

Gson gson = new Gson(); 
GsonClass gsonClass = gson.fromJson(response,GsonClass.class); 

String UserID = gsonClass.getUserID(); 

for (int i = 0; i < gsonClass.getData1().getData1_1().size(); i++) { 
    String name = gsonClass.getData1().getData1_1().get(i).getName(); 
    String test = gsonClass.getData1().getData1_1().get(i).getTest(); 
} 

for (int i = 0; i < gsonClass.getData1().getData1_2().getData1_2_1().size(); i++) { 
    String addr = gsonClass.getData1().getData1_2().getData1_2_1().get(i).getAddr(); 
    String phone = gsonClass.getData1().getData1_2().getData1_2_1().get(i).getPhone(); 
} 

for (int i = 0; i < gsonClass.getData1().getData1_2().getData1_2_2().size(); i++) { 
    String country = gsonClass.getData1().getData1_2().getData1_2_2().get(i).getCountry(); 
    String sex = gsonClass.getData1().getData1_2().getData1_2_2().get(i).getSex(); 
} 

你也可以使用GsonFormat在你的Android Studio中转换JSON上课。

这对你来说会很快。

1.增加GsonFormat enter image description here 2.使用代码

enter image description here enter image description here

+0

请解释您所做的更改以及原因。 –

+0

我已经解释过了。@ SotiriosDelimanolis – KeLiuyue

+0

@KeLiuyue谢谢您的好意回复先生:) 我会试试这个。谢谢:-) –