Подтвердить что ты не робот

Как преобразовать 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();
4b9b3361

Ответ 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)