2014-03-01 31 views
5

Sagen wir, ich habe folgende Liste von benutzerdefinierten Objekt: ArrayList<GroupItem> wo GroupItem ist eine Klasse, die int und String Variablen hat.Wie konvertiert man automatisch die Liste der Objekte zu JSONArray mit Gson-Bibliothek in Java?

Ich versuchte bisher Bibliothek, aber es ist nicht genau das, was ich will.

ArrayList<GroupItem> groupsList = /* ... */ 
Gson gson = new Gson(); 
JsonElement element = gson.toJsonTree(groupsList, new TypeToken<ArrayList<GroupItem>>() {}.getType()); 

JsonArray jsonArray = element.getAsJsonArray(); 

Mein Ziel ist es JSONArray (org.Json.JSONArray) irgendwie zu bekommen. Irgendwelche Ideen?

[EDIT]

Mein Projekt ist Android mit Cordova, die API auf org.Json.JSONArray basierend hat

und ich dachte, einige generische Art und Weise schreiben Instanzen JSONArray/JSONObject

Dank zu konvertieren,

+0

https://sites.google.com/site/gson/gson-user-guide#TOC-Array -Beispiele – ZaoTaoBao

+0

Ich wusste, es war Cordova! Ich habe das letzte Woche bei der Arbeit gemacht. Du brauchst kein Gson. – weston

Antwort

13

diese Weise für mich gearbeitet wird:

Convert alle Liste String.

String element = gson.toJson(
        groupsList, 
      new TypeToken<ArrayList<GroupItem>>() {}.getType()); 

erstellen JSONArray von String:

JSONArray list = new JSONArray(element); 
+3

Akzeptierte Antwort gibt eine Reihe von Nullen, das funktioniert –

1

Warum möchten Sie mit GSON in eine org.json-Klasse konvertieren? Sie müssen auch keinen benutzerdefinierten Code schreiben, um ein JSONArray zu erhalten. Die org.json api bietet eine Möglichkeit, dies zu tun.

LinkedList list = new LinkedList(); 
    list.add("foo"); 
    list.add(new Integer(100)); 
    list.add(new Double(1000.21)); 
    list.add(new Boolean(true)); 
    list.add(null); 
    JSONArray jsonArray = new JSONArray(list); 
    System.out.print(jsonArray); 
1

Sie brauchen nicht gson. Es gibt eine constructor, die eine Sammlung nimmt, so einfach:

ArrayList<GroupItem> groupsList =... ; 
JSONArray JSONArray = new JSONArray(groupsList); 
+0

richtig, aber Array ist eine Liste von Objekten – snaggs

+0

Haben Sie es versucht.Was stimmt damit nicht? – weston

+0

Sie brauchen keine Generika auf der Liste. – jeremyjjbrown

4

Die org.json basierte Klassen enthalten in Android haben keine zu konvertieren Java POJOs bezogene Funktionen JSON/aus.

Wenn Sie eine Liste von einiger Klasse (List<GroupItem>) und Sie müssen unbedingt das konvertieren zu einem org.json.JSONArray Sie haben zwei Möglichkeiten:

A) Verwenden Gson oder Jackson zu JSON konvertieren, analysiert dann die JSON in ein JSONArray:

List<GroupItem> list = ... 
String json = new Gson().toJson(list); 
JSONArray array = new JSONArray(json); 

B) Code schreiben sie den JSONArray und die JSONObject erstellen s es aus Ihrer Java-Objekte enthalten:

JSONArray array = new JSONArray(); 
for (GroupItem gi : list) 
{ 
    JSONObject obj = new JSONObject(); 
    obj.put("fieldName", gi.fieldName); 
    obj.put("fieldName2", gi.fieldName2); 
    array.put(obj); 
} 
0

Verwenden Jackson für JSON-Objekt oder JSON-Objekt

Siehe zum nächsten Link Jackson examples

ObjectMapper objectMapper = new ObjectMapper(); 
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true); 
StringWriter stringWriter = new StringWriter(); 
objectMapper.writeValue(stringWriter, groupsList); 
System.out.println("groupsList JSON is\n"+stringWrite); 
Verwandte Themen