2011-08-17 12 views
15

Ho un List<class> che vorrei convertire in un oggetto json e quindi attraversare i dati dall'oggetto json.Come inserire un elenco <class> in un oggetto JSONObject e quindi leggere quell'oggetto?

Se questo fosse solo un list<String> ho potuto solo fare qualcosa di simile:

JSONObject obj = new JSONObject(); 
List<String> sList = new ArrayList<String>(); 
sList.add("val1"); 
sList.add("val2"); 

obj.put("list", sList); 

Poi ho potuto attraversare la lista come:

JSONArray jArray = obj.getJSONArray("list"); 
for(int ii=0; ii < jArray.size(); ii++ 
    System.out.println(jArray.getString(ii)); 

Il problema con l'utilizzo della classe è che ho bisogno di avere accesso ai dati all'interno di ciascun elemento di classe del mio list<class> e non so come codificarlo/spostarlo in JSON. Qualsiasi aiuto sarebbe molto apprezzato.

+2

Quale classe 'JSONObject' stai usando? Ci sono alcuni ... – andyb

+0

Buon punto, avevo pensato che fossero le lezioni di org.json. –

risposta

15

chiamata getJSONObject() invece di getString(). Questo ti darà un handle sull'oggetto JSON nell'array e poi potrai togliere la proprietà dall'oggetto da lì.

Ad esempio, per ottenere il "valore" di proprietà da un List<SomeClass> dove SomeClass ha un String getValue() e setValue(String value):

JSONObject obj = new JSONObject(); 
List<SomeClass> sList = new ArrayList<SomeClass>(); 

SomeClass obj1 = new SomeClass(); 
obj1.setValue("val1"); 
sList.add(obj1); 

SomeClass obj2 = new SomeClass(); 
obj2.setValue("val2"); 
sList.add(obj2); 

obj.put("list", sList); 

JSONArray jArray = obj.getJSONArray("list"); 
for(int ii=0; ii < jArray.length(); ii++) 
    System.out.println(jArray.getJSONObject(ii).getString("value")); 
+0

Questo è esattamente quello che stavo cercando grazie! – Grammin

+0

non funzionano per me. Non riesco a analizzare la matrice da jsonObject. JSONArray jArray = obj.getJSONArray ("elenco"); mi darà un'eccezione Elenco JSONArray = new JSONArray (iconIds); obj.put ("lista", lista); Questo funziona. Sono in grado di analizzare l'array dall'oggetto JSONArray jArray = obj.getJSONArray ("elenco"); – fangzhzh

1

È possibile utilizzare un serializzatore/deserializzatore JSON come flexjson per eseguire la conversione.

+0

Grazie per il suggerimento, ma vorrei evitare di usare un serializzatore a tutti i costi se posso. – Grammin

+0

Ok, dato che vuoi attaccare con JSONArray e JSONObject, ho fornito una risposta alternativa. –

1

Ecco come lo faccio utilizzando Google Gson. Non sono sicuro, se esiste un modo più semplice per farlo (con o senza una libreria esterna).

Type collectionType = new TypeToken<List<Class>>() { 
       } // end new 
         .getType(); 

       String gsonString = 
       new Gson().toJson(objList, collectionType); 
3

supponiamo che la classe è dati con due oggetti nome e dob che sono entrambe le stringhe .

Inizialmente, controllare se l'elenco è vuoto. Quindi, aggiungere gli oggetti dalla lista per un JSONArray

JSONArray allDataArray = new JSONArray(); 
List<Data> sList = new ArrayList<String>(); 

    //if List not empty 
    if (!(sList.size() ==0)) { 

     //Loop index size() 
     for(int index = 0; index < sList.size(); index++) { 
      JSONObject eachData = new JSONObject(); 
      try { 
       eachData.put("name", sList.get(index).getName()); 
       eachData.put("dob", sList.get(index).getDob()); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      allDataArray.put(eachData); 
     } 
    } else { 
     //Do something when sList is empty 
    } 

Infine, aggiungere il JSONArray ad un JSONObject.

JSONObject root = new JSONObject(); 
    try { 
     root.put("data", allDataArray); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 

È possibile inoltre ottenere questi dati come una stringa troppo.

String jsonString = root.toString(); 
+0

Una buona spiegazione, risolto il mio problema. –

0

solo per aggiornare questa discussione, ecco come aggiungere una lista (come array JSON) in JSONObject. Plz sostituisci YourClass con il nome della tua classe;

List<YourClass> list = new ArrayList<>(); 
JSONObject jsonObject = new JSONObject(); 

org.codehaus.jackson.map.ObjectMapper objectMapper = new 
org.codehaus.jackson.map.ObjectMapper(); 
org.codehaus.jackson.JsonNode listNode = objectMapper.valueToTree(list); 
org.json.JSONArray request = new org.json.JSONArray(listNode.toString()); 
jsonObject.put("list", request); 
Problemi correlati