2013-01-16 10 views
14

Nel mio progetto corrente uso la libreria GSON in Android e ho riscontrato un problema di deserializzazione delle mappe nidificate. Questo è il modo iniziale JSON sembraGoogle GSON ha annidato la deserializzazione di HashMaps

{ 

"5":{ 
    "id":5, 
    "name":"initial name", 
    "image_url":"uploads/71d44b5247cc1a7c56e62fa51ca91d9b.png", 
    "status":"1", 
    "flowers":{ 
     "7":{ 
      "id":7, 
      "category_id":"5", 
      "name":"test", 
      "description":"some description", 
      "price":"1000", 
      "image_url":"uploads/test.png", 
      "status":"1", 
      "color":"red", 

     } 
    } 
    } 
} 

E di mio POJO

class Category { 
long id; 
String name; 
String image_url; 
HashMap<String,Flower> flowers; 
} 

E Fiore classe

class Flower { 
long id; 
String category_id; 
String name; 
String description; 
String price; 
String image_url; 
String status; 
} 

Ma quando provo a deserializzare questi oggetti, posso accedere HashMaps nidificati, il il codice di esempio è

public class TestJson { 
public static void main(String[] args) { 
    Gson gson = new Gson(); 
    try { 
    BufferedReader br = new BufferedReader(
     new FileReader("2.txt")); 
    HashMap<String,Category> map = gson.fromJson(br, HashMap.class); 
    Collection<Category> asd = map.values(); 
      System.out.println(map.values()); 

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

    } 
} 

Qualche suggerimento?

risposta

28

Questo gson.fromJson(br, HashMap.class); indica a Gson che si desidera deserializzare su una mappa di tipo di valore sconosciuto. Saresti tentato di specificare qualcosa come Map<String,Category>.class, ma non puoi farlo in Java, quindi la soluzione è usare quello che hanno chiamato TypeToken in Gson.

Map<String, Category> categoryMap = gson.fromJson(br, new TypeToken<Map<String, Category>>(){}.getType()); 
+0

Sì, ho perso TypeTokens nel mio codice, dopo le correzioni tutto funziona perfettamente. Grazie –

+0

Grazie .. Questo è esattamente quello che sto cercando dall'ultima mezz'ora :) – Arjun

Problemi correlati