繁体   English   中英

使用Gson进行JSON反序列化

[英]JSON deserialization with Gson

这是我的JSON数据:

{
  "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() ; 关键是“木板”,但我想要一张每个木板和标题的地图,依此类推。

您需要一个映射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...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM