2013-05-25 21 views
5

Jestem początkujący w java/Android i próbuję parsować JSON z Gsonem.Gson z dynamiczną nazwą (Android)

Mam pewne trudności z częścią plików. Z tego co czytałem należy używać MapHash ale nie jestem pewien, jak go używać w tym kodzie

Tutaj moje główne klasy

InputStream source = retrieveStream(url); 
Gson gson = new Gson(); 
Reader reader = new InputStreamReader(source); 
SearchResponse response = gson.fromJson(reader, SearchResponse.class); 

Klasa zrobić parsowanie

public class SearchResponse { 

    public List<Podcast> podcasts; 

    class Podcast { 

     @SerializedName("files") 
     private List<File> files; 

     @SerializedName("format") 
     private String format; 

     @SerializedName("title") 
     private String title; 

    class File { 
     private String ValueX; 
     private String URLX; 
     } 
    } 
} 

struktura json

{ 
"podcasts": [ 
    { 
    "files": [ 
     {"NameA": "ValueA"}, 
     {"NameB": "ValueB"}, 
     {"...": "..."} 
    ], 
    "format": "STRING", 
    "title": "STRING" 
    } 
    ] 
} 

Dzięki za pomoc

oto plik redagowanego struktury JSON próbuję analizować http://jsontest.web44.net/noauth.json

+0

można analizować JSON nawet bez użycia Gson. Co chcesz uzyskać z JSONObject? –

+0

Chcę uzyskać zarówno nazwę, jak i wartość. – Keven

+0

Czy masz przed sobą obiekt JSON, który może być odpowiedzią skądś? –

Odpowiedz

5

W swojej klasie File masz 2 atrybuty: ValueX i URLX. Ale w JSON masz 2 pola NameA i NameB ...

nazw w odpowiedzi JSON i klasa musi się zgadzać, inaczej nie dostaniesz żadnej wartości ...

Poza tym struktury klasa wygląda dobrze, a kod do deseralizing wygląda dobrze, jak dobrze ... nie sądzę, potrzebujesz HashMap ...


EDIT: Biorąc pod uwagę swój komentarz, można użyć HashMap. Można zmienić klasę Podcast używając:

@SerializedName("files") 
private List<Map<String,String>> files; 

i powinieneś dostać to analizowany poprawnie.

Musisz użyć List, ponieważ masz tablicę JSON (otoczoną [ ]), a następnie możesz użyć Map, aby zezwolić na różne nazwy pól.

Należy pamiętać, że trzeba usunąć klasę File ...

+0

, ale nazwa i wartość są losowe. Zmodyfikowałem mój post, aby to odzwierciedlić. Położyłem plik, aby pokazać strukturę json http://jsontest.web44.net/noauth.json – Keven

+0

@Keven see edit – MikO

+0

dzięki, znalazłem również moją odpowiedź na http://stackoverflow.com/questions/7651953/gson-parsing-dynamic-json-field z wyjątkiem mojego było tak, jakbyś powiedział naprawdę listę – Keven

Powiązane problemy