[英]parsing Json with gson nested
我在使用GSON時遇到了一些麻煩,主要是從JSON反序列化。
我有以下JSON:
{
"1" : {
"name" : "NAME",
"admins" : {
"1": {
"name2" : "NAME2",
"admins2" : {
"1": { ... },
"2": { ... },
......
"n": { ... }
}
},
"2": { ... },
"3": { ... },
......
"n": { ... }
}
},
"2" : { ... },
"3" : { ... },
......
"n" : { ... }
}
我需要找到用gson表示json的類,我的問題是“ id”(由嵌套的“ n”個相關整數表示)
我相信您最好的選擇是使用地圖來提供動態鍵。 就像是:
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,那么您甚至需要在地圖中將其表示為密鑰。 我不確定Gson是否可以允許這種遞歸結構,但我相信Maps會解決您所要求的動態關鍵問題。
當然,一旦數據進入地圖,則取決於您的代碼來了解其中包含哪些數據(1、2,.. n)。
我假設您想要一種存儲整數的鍵的方法。
您想要一種使用Json String的方法。 由於它們是整數,因此可以有“ n”個鍵
1,2,3....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 ;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.