2013-08-07 191 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...