J'ai une liste que je dois convertir en objet JSON en utilisant GSON. Mon objet JSON contient un tableau JSON.
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
}
}
Ci-dessous est mon code dans lequel j'ai besoin de convertir ma liste en objet JSON qui contient un tableau JSON -
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 = ??
}
Pour l'instant, je n'ai que deux éléments dans la liste - J'ai donc besoin de mon objet JSON comme celui-ci -
{
"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
}
]
}
Quelle est la meilleure façon de procéder?
Si response
dans votre méthode marshal
est un DataResponse
, c'est ce que vous devez sérialiser.
Gson gson = new Gson();
gson.toJson(response);
Cela vous donnera la sortie JSON que vous recherchez.
Il y a un exemple de google gson documentation sur la façon de convertir réellement la liste en chaîne json:
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);
Vous devez définir le type de liste dans la méthode toJson
et passer l'objet liste pour le convertir en chaîne json ou vice versa.
En supposant que vous souhaitiez également obtenir json au 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
}
]
}
au lieu de
{"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}]}
vous pouvez utiliser jolie impression. Pour ce faire, utilisez
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(dataResponse);