2017-04-05 71 views
1

這是我的JSON的樣子,我不得不解析JSON,這可怎麼使用GSON解析JSON響應動態重點

{ 
    "data": { 
    "a": { 
     "abc": { 
     "c": "d" 
     } 
    } 
    } 
} 

其中「a」是動態密鑰做這可能時常變化。我無法找到一個解決方案,現在

+0

對此使用迭代器 –

+0

自定義反序列化器可能有助於https://sites.google.com/site/gson/gson-user-guide#TOC-Writing-a-Deserializer http://stackoverflow.com/questions/16590377 /自定義JSON-解串器-using-gson –

+0

[Gson:有沒有更簡單的方法來序列化地圖](http://stackoverflow.com/questions/8360836/gson-is-there-an-easier-way-to-serialize- a-map) –

回答

1

型號

public class Model { 

    private HashMap<String, String> data; 

    public Model() { 
    } 
} 

轉換JSON字符串使用GSON &從HashMap的準備數據的HashMap

Gson gson = new Gson(); 
Type typeHashMap = new TypeToken<Map<String, String>>(){}.getType(); 
Map<String,String> map = gson.fromJson(YOUR_JSON, typeHashMap); 

Set<Map.Entry<String, String>> entrySet = data.entrySet(); 

    Iterator iterator = entrySet.iterator(); 

    for(int j = 0; j < entrySet.size(); j++) { 
     try { 
      Map.Entry entry = (Map.Entry) iterator.next(); 
      String key = entry.getKey().toString(); 
      String value = entry.getValue().toString(); 
      //Add it to your list 
     } 
     catch(NoSuchElementException e) { 
      e.printStackTrace(); 
     } 
     break; 
    } 
+0

使用GSON不能做到這一點嗎? –

+0

它可以,我在更新答案 – Pehlaj

+0

感謝您的答案,但我正在使用retrofit使這個API調用需要一個響應模型,所以我正在尋找一種方法來使模型類來解析這個響應可以你能指導我嗎? –

1

我不知道,如果內部部分abc是你知道或不知道的。如果你知道你,那麼你一定可以用GSON來做。你必須創建用於內已知的對象的類,如下:

public class ABC { 
public C abc;} 

然後創建對於C類:

public class C { 
public String c;} 

然後,只需通過ABC類作爲如下的散列映射值:

public HashMap<String, ABC> a; 
+0

是的內部部分是知道給我的。 \t 我的模型類看起來像這樣public class Model {@SerializedName(「data」)@Expose private Map data; }和InnerModel是包含「abc」序列化的內容我能夠通過這種方式獲得「a」,但無法獲取內部數據模型。當我試圖在郵遞員中擊中API時,得到了有效的回覆,但在應用程序中,我將所有解析值都設置爲null,並且無法理解背後的原因。 這就是我所做的 –