пятница, 7 марта 2014 г.

[Android]Gson для разбора json

1) Скачаем Gson библиотеку и добавим ее в проект.

  • Добавляем в проект  JAR 
  1. Kликаем на папку с проектом в Eclipse
  2. Properties
  3. Java Built Path
  4. Переходим на вкладку Libraries
  5. Add External JARs и находите место куда сохранили JAR



2)Создаем класс соответствующий  JSON-у
Структура JSON-а

{
  "songs": [
    {
      "id": "1",
      "singer": "Eminem feat. Rihanna",
      "song_name": "The Monster"
    },
    {
      "id": "2",
      "singer": "Katy Perry feat. Juicy J",
      "song_name": "Dark Horse"
    },
    {
      "id": "3",
      "singer": "Stromae",
      "song_name": "Tous Les Mêmes"
    },
    {
      "id": "4",
      "singer": "Imany",
      "song_name": "You Will Never Know"
    }
  ]
}


  • Теперь создадим класс Song  и еще один ListOfSongs (имена переменных должны точно соответсвовать ключам в json или быть помечены аннотацией ) полное описание.
Класс Song

package com.javaandroidxml.songs;

import com.google.gson.annotations.SerializedName;

public class Song {


  public String id;
  public String singer;
  //Пример с неточным соответствием переменной ключу json-а но анотации 
  //говорит какому ключу jsona соответствует переменная songName 
  @SerializedName("song_name")
  public String songName; 

}

Класс ListOfSongs

package com.javaandroidxml.songs;

import java.util.ArrayList;

public class ListOfSongs {

 ArrayList<Song> songs;

 public ArrayList<Song> getSongs() {
  return songs;
 }

 public void setSongs(ArrayList<Song> songs) {
  this.songs = songs;
 }

}


Используем метод класса Gson fromJson(String json, Class<ListOfSongs> classOfT) на вход строка и литерал класса

package com.javaandroidxml.songs;

import com.google.gson.Gson;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Gson gson=new Gson();
  
  String response="{\"songs\":[{\"id\":\"1\",\"singer\":\"Eminem feat. Rihanna\",\"song_name\":\"The Monster\"},{\"id\":\"2\",\"singer\":\"Katy Perry feat. Juicy J\",\"song_name\":\"Dark Horse\"},{\"id\":\"3\",\"singer\":\"Stromae\",\"song_name\":\"Tous Les Mêmes\"},{\"id\":\"4\",\"singer\":\"Imany\",\"song_name\":\"You Will Never Know\"}]}";
  
  
  ListOfSongs listOfSong=gson.fromJson(response, ListOfSongs.class);
  for(Song song:listOfSong.getSongs())
  System.out.println("id :"+song.id+"singer :"+song.singer+"song name :"+song.songName);
  
  
 }

 

}

Зайдем еще раз в Propities -->Java Built Path --> Order & Export и поменяем порядок следования
на такой как на картинке
1)gson
2)Android Dependencies
3)Android Private Libraries
4) src
5)gen...










Вывод