2013-03-14 9 views
6

Каждый news запись имеет три вещи: title, content и date.Чтение JSON двойной двумерный массив в Java

Записи извлекаются из базы данных, и я хотел бы прочитать их в своем приложении, используя JSONObject и JSONArray. Однако я не знаю, как использовать эти классы.

Вот моя JSON строка:

[ 
    { 
     "news":{ 
     "title":"5th title", 
     "content":"5th content", 
     "date":"1363197493" 
     } 
    }, 
    { 
     "news":{ 
     "title":"4th title", 
     "content":"4th content", 
     "date":"1363197454" 
     } 
    }, 
    { 
     "news":{ 
     "title":"3rd title", 
     "content":"3rd content", 
     "date":"1363197443" 
     } 
    }, 
    { 
     "news":{ 
     "title":"2nd title", 
     "content":"2nd content", 
     "date":"1363197409" 
     } 
    }, 
    { 
     "news":{ 
     "title":"1st title", 
     "content":"1st content", 
     "date":"1363197399" 
     } 
    } 
] 
+0

Для начала, сделайте класс под названием News с 3 полями: название, содержание и дата. –

+0

хорошо, а потом ??? – Alex

+0

Прочитайте документацию по использованию парсеров java json. –

ответ

8

Ваш JSON строка является JSONArray из JSONObject, который затем содержит внутренний JSONObject под названием "Новости".

Попробуйте для разбора его:

JSONArray array = new JSONArray(jsonString); 

for(int i = 0; i < array.length(); i++) { 
    JSONObject obj = array.getJSONObject(i); 
    JSONObject innerObject = obj.getJSONObject("news"); 

    String title = innerObject.getString("title"); 
    String content = innerObject.getString("content"); 
    String date = innerObject.getString("date"); 

    /* Use your title, content, and date variables here */ 
} 
+0

Спасибо, что это работает! :) – Alex

+1

@JonathanHugh Я рад, что вы нашли ответ на свой вопрос. Помните, что если ответ отвечает вашим потребностям, вы должны принять этот ответ, нажав галочку под стрелками голосования, чтобы люди, просматривающие этот вопрос в будущем, могли определить, какой ответ решил проблему. – MCeley

2

Прежде всего, ваша структура JSON не является идеальным. У вас есть массив объектов, каждый из которых имеет в нем один объект. Тем не менее, вы можете прочитать это следующим образом:

JSONArray jsonArray = new JSONArray (jsonString); 
int arrayLength = jsonArray.length(); 

for (int counter = 0; counter < arrayLength; counter ++) { 
    JSONObject thisJson = jsonArray.getJSONObject (counter); 

    // we finally get to the proper object 
    thisJson = thisJson.getJSONObject ("news"); 

    String title = thisJson.getString ("title"); 
    String content = thisJson.getString ("content"); 
    String date = thisJson.getString ("date"); 

} 

Однако!

Вы могли бы сделать лучше, если вы измените JSON, чтобы выглядеть следующим образом:

[ 
    { 
     "title": "5th title", 
     "content": "5th content", 
     "date": "1363197493" 
    }, 
    { 
     "title": "4th title", 
     "content": "4th content", 
     "date": "1363197454" 
    } 
] 

Затем можно разобрать его следующим образом:

JSONArray jsonArray = new JSONArray (jsonString); 
int arrayLength = jsonArray.length(); 

for (int counter = 0; counter < arrayLength; counter ++) { 
     // we don't need to look for a named object any more 
    JSONObject thisJson = jsonArray.getJSONObject (counter);  

    String title = thisJson.getString ("title"); 
    String content = thisJson.getString ("content"); 
    String date = thisJson.getString ("date"); 
} 
+0

У вас неправильная дата - это строка, которую вы не получите, используя getLong(), проверьте котировки – Pragnani

+1

«Ваш плохой человек» - мнение. Массив может содержать другие объекты, кроме «новостей», поэтому формат json на самом деле довольно описательный. – 323go

+0

@ 323go он фактически говорит, что это двумерный массив в названии, и в первой строке вопроса он говорит: «Каждая новость имеет три вещи: название, контент и дата». Я думаю, что он действительно не понимает синтаксис массивов и объектов JSON, поэтому я попытался помочь с примером. – Shade