Как разбирать JSONArray на Java с помощью Json.просто?

Я пытаюсь прочитать файл 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.простой (из GoogleCode), но я открыт для других библиотек JSON. Я слышал о Джексоне и Gson: они лучше, чем JSON.просто?

вот мой текущий код 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);
        }

Я проверяю много примеров (некоторые в стек! но я так и не нашел решения своей проблемы.

возможно, мы не можем сделать это с JSON.просто? Что вы рекомендовать?

2 ответов


вы никогда не присвоить новое значение jsonObject, поэтому внутри цикла он по-прежнему относится к полный данных объекта. Я думаю, вы хотите что-то вроде:

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

это работает! Спасибо Рассел. Я закончу свое упражнение и попробую 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);
        }