Как разбирать 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);
}