如何使用Json.simple解析Java中的JSONArray?

我尝试读取这样的JSON文件:

{ "presentationName" : "Here some text", "presentationAutor" : "Here some text", "presentationSlides" : [ { "title" : "Here some text.", "paragraphs" : [ { "value" : "Here some text." }, { "value" : "Here some text." } ] }, { "title" : "Here some text.", "paragraphs" : [ { "value" : "Here some text.", "image" : "Here some text." }, { "value" : "Here some text." }, { "value" : "Here some text." } ] } ] } 

这是一个学校练习,我选择尝试使用JSON.simple(来自GoogleCode),但我对另一个JSON库开放。 我听说过Jackson和Gson:他们比JSON.simple好吗?

这是我目前的Java代码:

  Object obj = parser.parse(new FileReader( "file.json" )); JSONObject jsonObject = (JSONObject) obj; // First I take the global data String name = (String) jsonObject.get("presentationName"); String autor = (String) jsonObject.get("presentationAutor"); System.out.println("Name: "+name); System.out.println("Autor: "+autor); // Now we try to take the data from "presentationSlides" array JSONArray slideContent = (JSONArray) jsonObject.get("presentationSlides"); Iterator i = slideContent.iterator(); while (i.hasNext()) { System.out.println(i.next()); // Here I try to take the title element from my slide but it doesn't work! String title = (String) jsonObject.get("title"); System.out.println(title); } 

我查了很多例子(有些在Stack!)但是我从来没有找到问题的解决方案。

也许我们不能用JSON.simple做到这一点? 您有什么推荐的吗?

您永远不会为jsonObject分配新值,因此在循环内它仍然引用完整的数据对象。 我想你想要的东西:

 JSONObject slide = i.next(); String title = (String)slide.get("title"); 

它正在工作! Thx Russell。 我将完成我的练习,并尝试GSON看看差异。

这里的新代码:

  JSONArray slideContent = (JSONArray) jsonObject.get("presentationSlides"); Iterator i = slideContent.iterator(); while (i.hasNext()) { JSONObject slide = (JSONObject) i.next(); String title = (String)slide.get("title"); System.out.println(title); }