如何使用GSON从此JSON文件中获取文本?

时间:2013-08-24 14:38:04

标签: java json gson

我使用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)来做到这一点,但我也试图学会这样做。谢谢你的帮助!

2 个答案:

答案 0 :(得分: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包装

享受

答案 1 :(得分:1)

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

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所说,创建模板将是很好的解决方案。