web-dev-qa-db-fra.com

Comment convertir ArrayList de la classe personnalisée à JsonArray en Java?

J'essaie de convertir ArrayList de la classe personnalisée à JsonArray. Ci-dessous mon code. Il s’exécute correctement, mais certains éléments JsonArray apparaissent sous forme de zéros bien qu’ils soient des nombres dans ArrayList. J'ai essayé de les imprimer. Comme clientOne dans ArrayList a 35 ans mais 0 dans JsonArray. Quel pourrait être le problème?

    ArrayList<Customer> customerList = CustomerDB.selectAll();
    Gson gson = new Gson();

    JsonElement element = 
     gson.toJsonTree(customerList , new TypeToken<List<Customer>>() {}.getType());

    JsonArray jsonArray = element.getAsJsonArray();
20
Sean Kilb

Essayez l'approche suivante. devrait marcher.

List<Customer> customerList = CustomerDB.selectAll();

Gson gson = new Gson();
JsonElement element = gson.toJsonTree(customerList, new TypeToken<List<Customer>>() {}.getType());

if (! element.isJsonArray()) {
// fail appropriately
    throw new SomeException();
}

JsonArray jsonArray = element.getAsJsonArray();

La principale différence est que j'ai changé ArrayList en List.

28
Ahsan Shah

En guise de réponse supplémentaire, il peut également être raccourci.

List<Customer> customerList = CustomerDB.selectAll();

JsonArray result = (JsonArray) new Gson().toJsonTree(customerList,
            new TypeToken<List<Customer>>() {
            }.getType());
11
Fadils

Je ne sais pas si cette solution fonctionne bien par rapport aux autres réponses, mais c’est une autre façon de le faire, qui est relativement propre et devrait suffire dans la plupart des cas.

ArrayList<Customer> customerList = CustomerDB.selectAll();
Gson gson = new Gson();
String data = gson.toJson(customerList);
JsonArray jsonArray = new JsonParser().parse(data).getAsJsonArray();

J'adorerais entendre quelqu'un d'autre si, et à quel point, cela est inefficace.

4
Danjoa

List <> est un objet Java normal et peut être transformé avec succès à l'aide de l'objet gson standard api .

"libraries": [
    {
      //Containing object 
    },
    {
      //Containing object 
    }
   ],
...
1
cdkrot

Considérons une liste d'objets de type Model.class

ArrayList<Model> listOfObjects = new ArrayList<Model>();

Liste à JSON

String jsonText =  new Gson().toJson(listOfObjects);

JSON à la liste

 Type listType = new TypeToken<List<Model>>() {}.getType();

 List<Model> myModelList = new Gson().fromJson(jsonText , listType);
1
Hitesh Sahu

Pour ceux qui le font dans Kotlin , vous pouvez l'obtenir de cette façon,

val gsonHandler = Gson()
val element: JsonElement = gsonHandler.toJsonTree(yourListOfObjects, object : TypeToken<List<YourModelClass>>() {}.type)
0
TapanHP

Utilisez google gson jar, veuillez consulter l'exemple de code ci-dessous,

    public class Metric {
        private int id;
        ...
       setter for id
        ....
       getter for id
    }

    Metric metric = new Metric();
    metric.setId(1);

    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.serializeNulls();
    Gson gson = gsonBuilder.create();
    System.out.println(gson.toJson(metric));

StringBuffer jsonBuffer = new StringBuffer("{ \"rows\": [");
List<Metric> metrices = new ArrayList<Metric>();
// assume you have more elements in above arraylist
boolean first = true;
for (Metric metric : metrices) {
       if (first)
      first = false;
    else
      jsonBuffer.append(",");
      jsonBuffer.append(getJsonFromMetric(metric));
}
jsonBuffer.append("]}");

private String getJsonFromMetric(Metric metric) {
GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.serializeNulls();
    Gson gson = gsonBuilder.create();
    return gson.toJson(metric);
}
0
anand kumar