2013-03-14 12 views
6

Każdy wpis news ma trzy rzeczy: title, content i date.Reading JSON podwójna tablica wymiarowa w Javie

Wpisy są pobierane z bazy danych i chciałbym je przeczytać w mojej aplikacji przy użyciu JSONObject i JSONArray. Jednak nie wiem, jak korzystać z tych klas.

Oto mój JSON ciąg:

[ 
    { 
     "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

Aby rozpocząć, należy klasę o nazwie Wiadomości z 3 polami: tytuł, treść i data. –

+0

dobrze, a następnie? – Alex

+0

Przeczytaj dokumentację na temat używania parserów json json. –

Odpowiedz

8

Twój JSON ciąg jest JSONArray z JSONObject który następnie zawierać wewnętrzny JSONObject nazwie "news".

Spróbuj tego celu analizowania go:

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

Dziękuję, to działa! :) – Alex

+1

@ JonathanHugh Cieszę się, że udało ci się znaleźć odpowiedź na twoje pytanie. Pamiętaj, że jeśli podana odpowiedź odpowiada Twoim potrzebom, powinieneś zaakceptować tę odpowiedź, klikając znacznik wyboru pod strzałkami do głosowania, aby osoby oglądające to pytanie w przyszłości mogły powiedzieć, która odpowiedź rozwiązała problem. – MCeley

2

Przede wszystkim swoją strukturę JSON nie jest idealny. Masz szereg obiektów, z których każdy ma jeden obiekt. Można jednak przeczytać go w ten sposób:

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"); 

} 

Jednak!

Można to zrobić lepiej, jeśli zmienisz JSON aby wyglądać następująco:

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

Następnie można go przetworzyć w następujący sposób:

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

Zła data jest ciągiem, którego nie dostaniesz za pomocą getLong(), sprawdź cytaty – Pragnani

+1

"Twój json jest zły" to opinia. Tablica może zawierać inne obiekty poza "nowościami", więc format jsona jest w rzeczywistości dość opisowy. – 323go

+0

@ 323go mówi, że jest to dwuwymiarowa tablica w tytule iw pierwszym wierszu pytania: "Każda wiadomość ma trzy rzeczy: tytuł, treść i datę". Wydaje mi się, że nie rozumie on składni macierzy i obiektów JSON, więc spróbowałem pomóc przy pomocy przykładu. – Shade