2017-08-03 70 views
0

我正在尋找更好的(比我現在做的更好)的方式來使用Gson從JSON文件中提取一些數據。顯然,所需的數據部分是但相當交錯,像這樣:使用Gson從交錯json提取數據的更好方法

{ 
    "media": { 
     "content": [ 
      { 
       "node": { "text": "foo", "id": "123", "user": "somebody" } 
      } 
     ] 
    }, 
    "enabled": true, 
    "count": 0, 
    "token": "abc" 

} 

我知道我可以做這樣的事情,但做法是相當繁瑣:

GsonBuilder builder = new GsonBuilder(); 
jsonObject = builder.create().fromJson(jsonString, jsonObject.class); 

class jsonObject { 
    Media media; 
    Boolean enabled; 
    Integer count; 
    String token; 

    class Media { 
     ArrayList<Node> content; 
    } 

    class Node { 
     HashMap<String,String> node; 
    } 

} 

所以我的問題是,如果有一種更優雅的方式來提取字段?我想有一個類似:

class jsonObject { 
    HashMap<String, String> node; 
    Boolean enabled; 
    Integer count; 
    String token; 
} 

非常感謝。任何幫助和建議表示讚賞。

+0

我相信這個問題是和你的一樣https://stackoverflow.com/questions/2779251/how- can-i-convert-json-to-a-hashmap-using-gson – Luca

+0

Thanks @Luca。這看起來很有趣,但乍看之下並不完全符合我的要求。但我會仔細看看。 – TheDude

回答

1

看起來就像這樣做。如果您使用的是JSON模式文件,並且通過像http://www.jsonschema2pojo.org/這樣的生成器運行它,它會吐出類似於您所列出的pojos,這非常適合使用GSON進行攝取。

但是,如果你想拉一個完整的JSON對象到地圖中,你可以使用

Type type = new TypeToken<Map<String, String>>(){}.getType(); 
Map<String, String> map = gson.fromJson("{'key1':'value1','key2':'value2'}", type); 
+0

謝謝。好吧,也許我只需要完成工作併爲每個我想要使用的json文件準備一堂課。該鏈接看起來非常有用! – TheDude

+0

如果你看看我引用的http://www.jsonschema2pojo.org/網站,當你將'Source Type'改爲json時,它會從一個json數據塊中推斷出正確的模式。然後,你可以讓它吐出所有的POJO,這是生成類的一個很好的方法,讓你開始不必手動編寫它們。 – pfranza

+0

很好的例子來演示反序列化JSON到Java鍵值映射。 – atiqkhaled