Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Gson进行JSON反序列化_Java_Json_Map_Gson - Fatal编程技术网

Java 使用Gson进行JSON反序列化

Java 使用Gson进行JSON反序列化,java,json,map,gson,Java,Json,Map,Gson,这是我的JSON数据: { "boards": [ { "board": "3", "title": "3DCG", "ws_board": 1, "per_page": 15, "pages": 11 }, { "board": "a", "title": "Anime & Manga", "ws_board": 1,

这是我的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());
JSONObject json=readJsonFromUrl(“http://api.4chan.org/boards.json");
字符串jsonBoards=json.toString();
Gson Gson=新的Gson();
Map Map=newhashmap();
map=(map)gson.fromJson(jsonBoards,map.getClass());

但这并不能完成任务。我需要一种方法来获得董事会的名称、头衔以及每个董事会的所有信息。当我使用
map.get()时;关键是“boards”,但我需要每个board和title的映射等等。

您需要一个映射JSON数据的类结构。您不需要在任何地方使用
映射
,因为您的JSON不表示任何映射

事实上,它表示一个对象
{…}
,该对象包含一个名为
“boards”
的字段,该字段反过来表示对象
{…}
的数组
[…]

因此,与JSON匹配的类结构如下(在伪代码中):

因此,您可以将所有板的所有数据输入:

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

Map Map=newhashmap()
是不必要的,因为您正在创建一个从未使用过的
HashMap
对象。您应该将其更改为
Map
Map=null
或将最后两行合并为
Map Map=(Map)gson.fromJson(…)
。似乎您应该调用
get(“boards”)
来获取
JSONObject
s的
JSONArray
,然后遍历该数组以获取所需的任何数据,并将其放入所需的任何数据结构中。你有什么具体问题?问题是我不知道怎么做。我正在阅读Json和Gson javadocs,但仍然无法理解。我试图使用JSONArray,但出现了一个错误。我尝试了这个json2=(JsonArray)map.get(“boards”);
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...