2013-03-13 18 views
7

Ho le snipets seguito di JSON String:Come convertire JSON String con campi dinamici su Object?

{ 
    "networks": { 
    "tech11": { 
     "id": "1", 
     "name": "IDEN" 
    }, 
    "tech12": { 
     "id": "2", 
     "name": "EVDO_B" 
    } 
} 
} 

che uso alcuni metodi per convertire questa stringa per oggetto:

private static Gson mGson = new Gson(); 

    ... 

public static WebObjectResponse convertJsonToObject(String jsonString) { 

    WebObjectResponse webObjectResponse = null; 


    if(jsonString != null && jsonString.length() > 1){ 
     webObjectResponse = mGson.fromJson(jsonString, WebObjectResponse.class); 
    } 

    return webObjectResponse; 

} 

Dove WebObjectResponse è classe che dovrebbe rappresentare sopra menzionato String.

Non è complicato se ottengo campi statici. Ma nel mio caso i valori sono diversi nomi: tech11, tech12 ....

posso usare @SerializedName ma le sue opere in casi specifici, come convertito "classe" a "class_". Come si vede networks Oggetto definito come elenco di oggetti tech ma con post-correzione diversa.

public class WebObjectResponse{ 
private DataInfoList networks = null; 
} 

Questo è attuazione statico, ho definito 2 valori tech11 e tech12 ma responso successivo potrebbe essere techXX

public class DataInfoList { 
private DataInfo tech11 = null; 
private DataInfo tech12 = null; 
} 


public class DataInfo { 
private String id = null; 
private String name = null; 
} 

Qual è il buon modo per convertire la corrente stringa JSON in Object dove elenco degli elementi sono Anche gli oggetti e hanno nomi diversi?

Grazie.

+2

Si prega di mostrare le parti pertinenti della classe 'WebObjectResponse', per la struttura. –

+0

Aggiunto 3 classi –

+1

Al momento, dovrebbe mappare perfettamente.Se hai una quantità variabile di oggetti 'DataInfo', allora considera di usare una mappa, con' techXX' come chiave String. –

risposta

6

Utilizzare una mappa!

vorrei fare le seguenti

public class WebObjectResponse { 
    private Map<String, DataInfo> networks; 
} 

public class DataInfo { 
    private String id = null; 
    private String name = null; 
} 

// later 
Gson gson = new Gson(); 
String json = "{\"networks\": {\"tech11\": { \"id\": \"1\",\"name\": \"IDEN\" }, \"tech12\": { \"id\": \"2\", \"name\": \"EVDO_B\" } }}"; 

WebObjectResponse response = gson.fromJson(json, WebObjectResponse .class); 

Per ogni oggetto in JSON networks, una nuova voce verrà aggiunto alla Map campo della classe WebObjectResponse. Quindi li fai riferimento per techXX o iterate attraverso il keyset.

Ipotizzando una struttura come questa

{ 
    "networks": { 
    "tech11": { 
     "id": "1", 
     "name": "IDEN" 
    }, 
    "tech12": { 
     "id": "2", 
     "name": "EVDO_B" 
    }, 
    "tech13": { 
     "id": "3", 
     "name": "WOHOO" 
    }, ... 
    } 
} 
+0

+1 e + V, non ha pensato, grazie –

2

Avremmo bisogno della struttura della tua classe per ulteriori dettagli.

Per quanto ne so, penso che sarà necessario avere alcuni mapping definiti da qualche parte (ho usato xml) e quindi provare a far corrispondere JSON con uno dei mapping per creare oggetti.

Google gson è buono. L'ho fatto in Jackson

Inoltre, la conversione di oggetti dovrebbe essere banale. Ma dal momento che potresti avere campi variabili come tech11 e tech12, potresti voler memorizzare il valore "rete" come una stringa e quindi estrarne i campi quando richiesto.

Spero di poterti aiutare.

Modifica: Unghie sotirie.

+1

aggiunta struttura di classe, grazie –