2013-08-07 219 views
1

這是我的JSON數據:反序列化JSON與GSON

{ 
    "boards": [ 
    { 
     "board": "3", 
     "title": "3DCG", 
     "ws_board": 1, 
     "per_page": 15, 
     "pages": 11 
    }, 
    { 
     "board": "a", 
     "title": "Anime & Manga", 
     "ws_board": 1, 
     "per_page": 15, 
     "pages": 11 
    }, 
    { 
     "board": "adv", 
     "title": "Advice", 
     "ws_board": 1, 
     "per_page": 15, 
     "pages": 11 
    }, 
    ... 
    ] 
} 

這是我反序列化代碼:

JSONObject json = readJsonFromUrl("http://api.4chan.org/boards.json"); 
String jsonBoards = json.toString(); 
Gson gson = new Gson(); 
Map<String, Object> map = new HashMap<String,Object>(); 
map = (Map<String,Object>) gson.fromJson(jsonBoards, map.getClass()); 

但它並不把工作做好。我需要一種方法來獲取每個電路板的電路板名稱,標題和所有信息。當我使用map.get();關鍵是「董事會」,但我想要一個每個董事會和標題的地圖等。

+1

行'性映射MAP =新的HashMap();'是不必要的,因爲您正在創建一個'HashMap'對象,你永遠不會使用。您應該將其更改爲'Map map;'或'Map map = null;'或將最後兩行合併爲Map map =(Map)gson.fromJson(...);'。 – gdiazc

+0

好像你應該調用'get(「boards」)'來得到'JSONObject'的'JSONArray's,然後遍歷這個數組來獲得你需要的任何數據,並把它放到你需要的任何數據結構中。你有什麼具體問題? – yshavit

+0

問題是我不知道該怎麼做。我正在通過Json和Gson javadocs閱讀,但仍然無法弄清楚。我試圖使用JSONArray,但我得到一個錯誤。我試過這個json2 =(JsonArray)map.get(「boards」); –

回答

2

您需要一個映射您的JSON數據的類結構。您無需在任何地方使用Map,因爲您的JSON不代表任何地圖!

事實上它代表了含有一種叫"boards"場,這又代表一個數組對象{...}[...]對象{...} ......

因此該類結構比賽您的JSON會是這樣的(在僞代碼):

class Response 
    List<Board> boards 

class Board 
    String board 
    String title 
    int ws_board 
    int per_page 
    int pages 

然後,爲了給JSON解析爲您的類結構,你只需要做到這一點:

Gson gson = new Gson(); 
Response response = gson.fromJson(jsonBoards, Response.class); 

所以你必須你所有的卡的所有數據爲:

String nameI = response.getBoards().get(i).getName(); 
String titleI = response.getBoards().get(i).getTitle(); 
//and so on...