我使用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)
来做到这一点,但我也试图学会这样做。谢谢你的帮助!
答案 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所说,创建模板将是很好的解决方案。