15

我正在尝试读取这样的 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 做到这一点?你有什么建议吗?

4

3 回答 3

18

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

JSONObject slide = i.next();
String title = (String)slide.get("title");
于 2013-09-16T15:46:22.980 回答
18

它正在工作!谢谢罗素。我将完成我的练习并尝试使用 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);
        }
于 2013-09-17T12:18:07.347 回答
-1

对于 Gson,您可以在此处粘贴您的 json 文件:https ://www.freecodeformat.com/json2pojo.php 创建适当的 pojo 类,然后使用此代码:

Gson gson = new Gson();

    try (Reader reader = new FileReader("pathToYourFile.json")) {

        // Convert JSON File to Java Object
        Root root = gson.fromJson(reader, Root.class);

        // print staff you need
        System.out.println(root.getCommands().get(0).getName());

    } catch (IOException e) {
        e.printStackTrace();
    }
于 2020-08-25T21:45:08.670 回答