2017-09-26 59 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謝謝您的好意回覆先生:) 我會試試這個。謝謝:-) –