0

我使用 GSON 来解析这个 JSON 文件:

{
    "database" : {
        "source" : "google",
        "items" : [
            {"title" : "hello world",
            "id" : "id_hello_world"},

            {"title" : "goodbye world",
            "id" : "id_goodbye_world"}
        ]
    }
}

我读到了哪个String jsonLine

我试图解析它并输出所有的值,但我得到ClassCastException

JsonObject source = database.getAsJsonObject("source")线。

我认为我搜索数据错误。我用它来搜索和输出:

        JsonElement jelement = new JsonParser().parse(jsonLine);

        JsonObject jobject = (JsonObject) jelement;

        JsonObject database = jobject.getAsJsonObject("database"); //Get Database
        JsonObject source = database.getAsJsonObject("source"); //Get Source
        System.out.println("Source: " + source.toString()); //Print source

        JsonArray items = database.getAsJsonArray("items"); //Get items array

        for(int i=0; i< items.size(); i++){ //for every item
            JsonObject item = (JsonObject) items.get(i); //Select item i
            JsonObject title = (JsonObject) item.getAsJsonObject("title");
            JsonObject id = (JsonObject) item.getAsJsonObject("id");
            System.out.println("Item " + i + " title : " + title.toString() + ", id : " + id.toString());
        }

如果有人可以更正我的代码,那将是完美的。我知道还有其他更简单的方法可以做到这一点,GSON.fromJSON(jsonLine, Wrapper.class)但我也在尝试学习这样做。谢谢您的帮助!

4

2 回答 2

1

在你要使用Gson方法之前,创建你的模板结构:

class Item{
  private String item = "";
  private String id = ""; // for sure you can use 'int'
}

public class DataBase{
  private  List<Item> items = null;
  private String source = "";
}

现在你的主要课程:

public class YourClass{
 private DataBase database = "";

 ....

 database  = gson.fromJson(yourString, YourClass.class);

...
}

不要忘记try/catch包装

享受

于 2013-08-24T14:49:30.853 回答
1

使用JsonPrimitive而不是JsonObject. (它必须是 GSON 的内部错误,因为,就 GSON 2.2.3 的版本而言,尝试转换JsonPrimitiveJsonObject不可能的)所以,你的代码是这样的:

JsonElement jelement = new JsonParser().parse(jsonLine);

JsonObject jobject = (JsonObject) jelement;

JsonObject database = jobject.getAsJsonObject("database"); // Get
                                                            // Database
JsonPrimitive source = database.getAsJsonPrimitive("source"); // Get
                                                                // Source
System.out.println("Source: " + source.toString()); // Print source

JsonArray items = database.getAsJsonArray("items"); // Get items array

for (int i = 0; i < items.size(); i++) { // for every item
    JsonObject item = (JsonObject) items.get(i); // Select item i
    JsonPrimitive title = item.getAsJsonPrimitive("title");
    JsonPrimitive id = item.getAsJsonPrimitive("id");
    System.out.println("Item " + i + " title : " + title.toString()
            + ", id : " + id.toString());
}

正如 Maxim Shoustin 所展示的,创建模板将是一个很好的解决方案。

于 2013-08-25T06:51:55.430 回答