2011-12-29 126 views
1

我在使用GSON時遇到了一些麻煩,主要是從JSON反序列化。使用gson嵌套解析Json

我有以下的JSON:

{ 
    "1" : { 
     "name" : "NAME", 
     "admins" : { 
      "1": { 
       "name2" : "NAME2", 
       "admins2" : { 
        "1": { ... }, 
        "2": { ... }, 
        ...... 
        "n": { ... } 
       } 
      }, 
      "2": { ... }, 
      "3": { ... }, 
      ...... 
      "n": { ... } 
     } 
    }, 
    "2" : { ... }, 
    "3" : { ... }, 
    ...... 
    "n" : { ... } 
} 

我需要找到類代表與GSON是JSON,我的問題是「ID」(由「N」關於相關代表整數嵌套)

+0

你能更具體嗎?我們也不知道字典的id。究竟yopu想要達到什麼?你有什麼問題? – 2011-12-29 13:40:31

+0

我找不到類用json代表那個json,而且「id」是每個字典的關鍵字 – 2011-12-29 13:45:55

回答

0

我假設你想要一種方法來存儲整數的鍵。
你想要一種使用Json字符串的方式。由於它們是整數,可以有鑰匙

1,2,3....n 

「n」的數量和每個按鍵都會有它的值。

一種方法是使用HashMap。

鍵以整數形式存儲在地圖中。
無限數量的鑰匙可以使用。
輕鬆遍歷鍵值對。
可輕鬆擴展以添加不同的對象。

/*Here we do the following steps 
* 1. create the data 
* 2. convert data to Json String using GSON 
* 3. JSon String is used to populate the data bean using GSON. 
* 
* Integers will be used as the key. 
*/ 
public class CreateAccessGSON() 
{ 
    public static void main(String[] args) 
    { 

     Gson gson = new Gson(); //instantiate gson here. 

     //Creating the Data Object. 
     HashMap<Integer,AdminBean> tmpAdminMap = new HashMap<Integer,AdminBean>(); 

     AdminBean adminOne1 = new AdminBean(); 
     adminOne1.setName("Joe"); 

     tmpAdminMap.put(1,adminOne1); // key is an Integer 1 

     AdminBean adminOne2 = new AdminBean(); 
     adminOne2.setName("Blow"); 

     tmpAdminMap.put(2,adminOne2); // key is an Integer 2 

     //Set the value of the Map. 
     DataObjectBean dataObjectBean = new DataObjectBean(); 
     dataObjectBean.setAdminMap(tmpAdminMap); 

     String jsonString = gson.toJson(dataObjectBean); 

     System.out.println(jsonString); // print the Json String. 
      //Output will be as follows 
     /* 
      { 
      "adminMap" : 
        { 
         "1" : {"name":"Joe"} , 
         "2" : {"name":"Blow"} 
        } 
      } 
     */ 




     // Code to Convert Json String to the Associated object. 
      DataObjectBean accessDataObjectBean = gson.fromJson(jsonString ,DataObjectBean); 
      HashMap<Integer,AdminBean> retrieveAdminMap = accessDataObjectBean.getAdminMap(); 
      System.out.println(retrieveAdminMap.get(1).getName()); // Joe 
      System.out.println(retrieveAdminMap.get(2).getName()); // Blow 

      //get number of keys, we use the hashmap size. 
      System.out.println("Num of keys : " + retrieveAdminMap.size()); // Num of keys : 2 

      // You can use the Java Iterator to access each key and their values 
      Set<Integer> setKey = retrieveAdminMap.keySet(); 
      for(Integer keys : setKey) 
      { 
       AdminBean eachAdmin = retrieveAdminMap.get(keys); 
       System.out.println(eachAdmin.getName()); 
      } 
    } 
} 



//This class will store the Admin data. You can have more nested classes here. 
// This class can further have more maps. 
public class AdminBean 
{ 
    private String name = ""; 

    public String getName() 
    { 
     return name; 
    } 

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

// This main Java Bean which will be used to generate the JSON. 
// Since we need as Integer as key, we use the HashMap to store it. 
// HashMaps will allow storing unlimited Integers. 
public class DataObjectBean{ 
    private HashMap<Integer,AdminBean> adminMap = new HashMap<Integer,AdminBean>(); 
    public String getAdminMap() 
    { 
     return adminMap ; 
    } 

    public String setAdminMap (String adminMap) 
    { 
     this.name = adminMap ; 
    } 
} 
+0

非常感謝很多人!這非常有用! – 2011-12-29 18:11:53

0

我相信你最好的選擇是使用地圖來允許動態密鑰。例如:

public class JSWrapper { 
public HashMap<String, JSMessage> messages; 

public static class JSMessage { 

    public String name; 
    public Admins admins; 
    } 

    public static class Admins { 
      ... 
    } 
} 

看起來您的JSON具有遞歸結構,儘管從您的示例中不完全清楚。如果您的姓名和管理員密鑰不同,最終被命名爲namesn和adminsn,那麼您將需要在Map中將這些密鑰表示爲密鑰。我不確定Gson是否可以允許這種遞歸結構,但我相信Google Maps將解決您所問的動態關鍵問題。

當然,一旦數據出現在地圖中,它就取決於您的代碼以瞭解可以使用哪些數據(1,2,... n)。

+0

複合變相^^ – MahdeTo 2011-12-29 14:18:06