2010-12-29 6 views
13

Jestem względnie nowym programistą Java i potrzebuję parsować skomplikowany obiekt JSON przez przewód. Czytałem dokumentację GSON miniony dzień i nie miałem dużo szczęścia mogąc w pełni przeanalizować ten typ konstrukcji:Używanie GSON w Androidzie do parsowania złożonego obiektu JSON

{ 
    'Events' : [{ 
    'name' : 'exp', 
    'date' : '10-10-2010', 
    'tags' : ["tag 1", "tag2", "tag3"] 
    },...more events...], 
    'Contacts' : [{ 
    'name' : 'John Smith', 
    'date' : '10-10-2010', 
    'tags' : ["tag 1", "tag2", "tag3"] 
    },...more contacts...], 
} 

I byli w stanie zmusić go do pracy, podobnie jak pytanie, ale this nie może wymyślić, jak uruchomić dodatkowy poziom tablicy.

Odpowiedz

18

poprawny sposób, aby to zrobić używanie GSON w formacie, którego szukam, to:

//somewhere after the web response: 
Gson gson = new Gson(); 

Event[] events = gson.fromJson(webServiceResponse, Event[].class); 


//somewhere nested in the class: 
static class Event{ 
    String name; 
    String date; 

    public String getName() 
    { 
     return name; 
    } 

    public String getDate() 
    { 
     return date; 
    } 

    public void setName(String name) 
    { 
     this.name = name; 
    } 

    public void setDate(String date) 
    { 
     this.date = date; 
    } 
} 
+2

jak otrzymam tagi z powyższego kodu? –

+0

Jakie tagi odwołujesz? – wajiw

+2

wewnątrz JSONArray of Events jest jeszcze jedna JSONArray z tagami nazw? Czy możesz wyjaśnić, jak używać tej klasy Event, aby uzyskać tagi JSONArray? –

7

Java ma swój własny parser JSON: możemy go również używać na Androidzie.

Poniżej znajduje się opis sposobu pobierania wszystkich zdarzeń z ciągu znaków.

String TAG  = "JSON EXAMPLE"; 
    String jsonString = "{\"Events\" : [{\"name\" : \"exp\",\"date\" : \"10-10-2010\",\"tags\" : [\"tag 1\",\"tag 2\",\"tag 3\"]}],\"Contacts\" : [{\"name\" : \"John Smith\",\"date\" : \"10-10-2010\",\"tags\" : [\"tag 1\",\"tag 2\",\"tag 3\"]}]}"; 

    try { 
     JSONObject jsonObj = new JSONObject(jsonString);  // create a json object from a string 
     JSONArray jsonEvents = jsonObj.getJSONArray("Events"); // get all events as json objects from Events array 

     for(int i = 0; i < jsonEvents.length(); i++){ 
      JSONObject event = jsonEvents.getJSONObject(i); // create a single event jsonObject 
      Log.e(TAG, "Event name:" + event.getString("name") + " date: " + event.getString("date")); 


      JSONArray eventTags = event.getJSONArray("tags"); 

      for(int j = 0; j < eventTags.length(); j++){ 
       Log.e(TAG, "Event tag: " + eventTags.getString(j)); 
      } 

     }   

    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

Pamiętaj: Twój obiekt JSON (z pytaniem) rzuci wyjątek, ponieważ nie jest ważne (nie jestem pewien, ale to wygląda jak JavaScript Object). Trzeba dodać kilka cytatów na każdej nieruchomości (klucz) i ecape je \ (\ ").
Ten tool jest naprawdę ładne, aby sprawdzić, czy JSON String jest poprawny, czy nie.

+6

OP pyta, jak korzystać z GSON, co jest o wiele wygodniejsze niż użycie wbudowanego analizatora składni JSON. Twoja odpowiedź jest bardzo dobra, ale nie dla tego szczególne pytanie – espinchi

+0

masz rację, przepraszam: będę bardziej ostrożny następnym razem.Dziękuję –