Как преобразовать ArrayList пользовательского класса в JsonArray в Java?
Я пытаюсь преобразовать ArrayList пользовательского класса в JsonArray. Ниже мой код. Он отлично работает, но некоторые элементы JsonArray имеют нули, хотя они являются числами в ArrayList. Я попытался их распечатать. Подобно возрасту customerOne в ArrayList составляет 35, но это 0 в JsonArray. Что может быть неправильным?
ArrayList<Customer> customerList = CustomerDB.selectAll();
Gson gson = new Gson();
JsonElement element =
gson.toJsonTree(customerList , new TypeToken<List<Customer>>() {}.getType());
JsonArray jsonArray = element.getAsJsonArray();
Ответы
Ответ 1
Попробуйте использовать следующий подход. должен работать.
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();
Основное различие заключается в том, что я изменил ArrayList
на List
.
Ответ 2
В качестве дополнительного ответа его также можно уменьшить.
List<Customer> customerList = CustomerDB.selectAll();
JsonArray result = (JsonArray) new Gson().toJsonTree(customerList,
new TypeToken<List<Customer>>() {
}.getType());
Ответ 3
Не знаю, насколько хорошо это решение работает по сравнению с другими ответами, но это еще один способ сделать это, что довольно чисто и должно быть достаточно для большинства случаев.
ArrayList<Customer> customerList = CustomerDB.selectAll();
Gson gson = new Gson();
String data = gson.toJson(customerList);
JsonArray jsonArray = new JsonParser().parse(data).getAsJsonArray();
Хотелось бы услышать от кого-то еще, если, а потом, как, неэффективно это на самом деле.
Ответ 4
List < > является обычным java-объектом и может быть успешно преобразован с использованием стандартного gson-объекта api.
Список в gson выглядит следующим образом:
"libraries": [
{
//Containing object
},
{
//Containing object
}
],
...
Ответ 5
Используйте gogle json jar, см. пример кода ниже,
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);
}
Ответ 6
Рассмотрим список объектов типа Model.class
ArrayList<Model> listOfObjects = new ArrayList<Model>();
Список JSON
String jsonText = new Gson().toJson(listOfObjects);
JSON to LIST
Type listType = new TypeToken<List<Model>>() {}.getType();
List<Model> myModelList = new Gson().fromJson(jsonText , listType);
Ответ 7
Для любого, кто делает это в Котлине, вы можете получить его таким образом,
val gsonHandler = Gson()
val element: JsonElement = gsonHandler.toJsonTree(yourListOfObjects, object : TypeToken<List<YourModelClass>>() {}.type)