2015-01-11 3 views
7

Ich habe eine Liste, die ich mit GSON in JSON-Objekt konvertieren muss. Mein JSON-Objekt enthält JSON-Array.Wie konvertiert man die Liste in ein JSON-Objekt mit GSON?

public class DataResponse { 

    private List<ClientResponse> apps; 

    // getters and setters 

    public static class ClientResponse { 
     private double mean; 
     private double deviation; 
     private int code; 
     private String pack; 
     private int version; 

     // getters and setters 
    } 
} 

Unten ist mein Code, in dem ich brauche, um meine Liste zu JSON-Objekt zu konvertieren, die in ihm JSON Array hat -

public void marshal(Object response) { 

    List<DataResponse.ClientResponse> clientResponse = ((DataResponse) response).getClientResponse(); 

    // now how do I convert clientResponse list to JSON Object which has JSON Array in it using GSON? 

    // String jsonObject = ?? 
} 

Ab jetzt habe ich nur zwei Elemente in Liste haben - also ich brauche mein JSON-Objekt so -

{ 
    "apps":[ 
     { 
     "mean":1.2, 
     "deviation":1.3 
     "code":100, 
     "pack":"hello", 
     "version":1 
     }, 
     { 
     "mean":1.5, 
     "deviation":1.1 
     "code":200, 
     "pack":"world", 
     "version":2 
     } 
    ] 
} 

Was ist der beste Weg, dies zu tun?

+1

Der von Ihnen angezeigte JSON ist kein JSON-Array, sondern ein JSON-Objekt. –

+0

oops Entschuldigung, ja, es ist JSON-Objekt. Lass mich die Frage neu formulieren. – AKIWEB

Antwort

19

Wenn response in Ihrer marshal Methode eine DataResponse ist, dann sollten Sie serialisieren.

Gson gson = new Gson(); 
gson.toJson(response); 

Das wird Ihnen die JSON-Ausgabe geben, nach der Sie suchen.

25

Es ist ein Beispiel von Google Gson documentation auf, wie die Liste zu JSON-String tatsächlich konvertieren:

Type listType = new TypeToken<List<String>>() {}.getType(); 
List<String> target = new LinkedList<String>(); 
target.add("blah"); 

Gson gson = new Gson(); 
String json = gson.toJson(target, listType); 
List<String> target2 = gson.fromJson(json, listType); 

Sie müssen die Art der Liste in toJson Verfahren einzustellen und die Liste Objekt übergeben, um es zu konvertieren JSON-String oder umgekehrt.

+0

Dies ist unnötig und wird nicht den JSON erzeugen, nach dem sie gefragt haben. –

+4

Das ist eigentlich die einzige gültige Antwort für mich. –

3

Angenommen, Sie auch json im Format

{ 
    "apps": [ 
    { 
     "mean": 1.2, 
     "deviation": 1.3, 
     "code": 100, 
     "pack": "hello", 
     "version": 1 
    }, 
    { 
     "mean": 1.5, 
     "deviation": 1.1, 
     "code": 200, 
     "pack": "world", 
     "version": 2 
    } 
    ] 
} 

statt

{"apps":[{"mean":1.2,"deviation":1.3,"code":100,"pack":"hello","version":1},{"mean":1.5,"deviation":1.1,"code":200,"pack":"world","version":2}]} 

erhalten möchten, können Sie ziemlich Druck verwenden. Verwenden Sie dazu

Gson gson = new GsonBuilder().setPrettyPrinting().create(); 
String json = gson.toJson(dataResponse); 
Verwandte Themen