wake-up-neo.net

Wie konvertiert man ArrayList der benutzerdefinierten Klasse in Java in JsonArray?

Ich versuche, ArrayList der benutzerdefinierten Klasse in JsonArray zu konvertieren. Unten ist mein Code. Es wird eine feine Ausführung ausgeführt, aber einige JsonArray-Elemente werden als Nullen angezeigt, obwohl sie Zahlen in der ArrayList sind. Ich habe versucht, sie auszudrucken. Das Alter von customerOne in der ArrayList ist 35, aber es ist 0 im JsonArray. Was könnte falsch sein?

    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

Versuchen Sie den folgenden Ansatz. sollte arbeiten.

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();

Der Hauptunterschied ist, ich habe ArrayList in List geändert.

28
Ahsan Shah

Als zusätzliche Antwort kann es auch kürzer gemacht werden.

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

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

Ich weiß nicht, wie gut diese Lösung im Vergleich zu den anderen Antworten abschneidet. Dies ist jedoch eine andere Methode, die recht sauber ist und für die meisten Fälle ausreichend sein sollte.

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

Würde gerne von jemandem hören, ob und wie ineffizient dies eigentlich ist.

4
Danjoa

List <> ist ein normales Java-Objekt und kann erfolgreich mit dem Standard-Gson-Objekt api ..__ umgewandelt werden. Die Liste in Gson sieht folgendermaßen aus:

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

Betrachten Sie eine Liste von Objekten des Typs Model.class

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

Liste zu JSON

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

JSON zur Liste

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

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

Für jeden, der es in Kotlin tut, können Sie es so bekommen,

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

Verwenden Sie google gson jar. Siehe Beispielcode unten.

    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