2017-01-28 140 views
1

我試圖解析我的JSON數據,看起來像下面的數據。 我已經成功了一些字段,但我試圖在「條款」下的「類別」下的「0」下獲得「名稱」。我如何使用Gson Library對嵌套的JSON對象進行排序?

[ 
    { 
    "ID": 1710, 
    "status": "publish", 
    "type": "post", 
    "content": "Lorem ipsum", 
    "parent": null, 
    "format": "standard", 
    "modified_tz": "UTC" 
    }, 
    "featured_image": { 
    "ID": 1713, 
    "title": "km", 
    "status": "inherit", 
    "type": "attachment", 
    } 
    } 
    } 
    } 
    }, 
    "terms": { 
    "category": [ <<<<---AM REFERENCING HERE--->>>>> 
    { 
    "ID": 2, 
    "name": "Entertainment", 
    "slug": "entertainment", 
    "taxonomy": "category", 
    "parent": null, 
    "count": 30, 
    } 
    ] 

    } 
    } 
    ] 

我這是怎麼分析的數據:

List<Object> list = (List) new Gson.fromJson(response, List.class); 
List<String, Object> mapPost = list.get(index); 
List<String, Object> terms = (Map<String, Object>) mapPost.get("terms"); 
List<String, Object> category= (Map<String, Object>) terms.get("category"); 
List<String, Object> zero= (Map<String, Object>) category.get("0"); 
String tag = (String) zero.get("name"); 

普萊斯幫助我什麼我做錯了什麼?

+0

它應該是'category.get(0)'。 '0'是該數組的索引,而不是json的密鑰 – akash93

+0

這是我得到的錯誤消息: –

+0

'E/AndroidRuntime:致命例外:主要 進程:example.example.com,PID:13804 java.lang。 ClassCastException:java.util.ArrayList不能轉換爲java.util.Map' –

回答

0

您提供的代碼,甚至不能編譯(破Gson構造函數調用; Java不提供List<K,V> ...)。列表不能在運行時轉換爲映射。該JSON壞爲好,但是,假設你提供的一些代碼,我想你想解析位於name$[(index)].terms.category[0].name

final String name = gson.fromJson(response, JsonElement.class).getAsJsonArray() 
      .get(index).getAsJsonObject() 
      .get("terms").getAsJsonObject() 
      .get("category").getAsJsonArray() 
      .get(0).getAsJsonObject() 
      .get("name").getAsJsonPrimitive() 
      .getAsString(); 
    System.out.println(name); 

你不需要反序列化你要去每個嵌套的對象遍歷(從性能的角度來看這更高效):只要遍歷JSON樹。

+0

謝謝你!,它的工作! –

+0

由於不確定用戶是否包含標籤(即'最終字符串名稱),我將上面的代碼包含在try catch塊中,這樣可以嗎? –

+0

這取決於。你可以打破這個鏈條,分開它的大塊。 –

0

我發現了一個解決方案:

由於「類別」標籤包含JSON對象的陣列(在此情況下,單個的對象)。

我投的「類別」到一個ArrayList

Map<String, Object> terms = (Map<String, Object>) mapPost.get("terms"); 
ArrayList category = new ArrayList(); 
category = ((ArrayList) terms.get("category")); //<--Cast to ArrayList 
zero = (Map<String, Object>) category.get(0); 

然後我做了「名稱」標籤:

String tag = (String) zero.get("name") 
相關問題