it-roy-ru.com

Как преобразовать ArrayList пользовательского класса в JsonArray в Java?

Я пытаюсь преобразовать ArrayList пользовательского класса в JsonArray. Ниже мой код. Он работает нормально, но некоторые элементы JsonArray имеют нулевые значения, даже если они являются числами в ArrayList. Я пытался распечатать их. Как и customerOne, возраст в ArrayList равен 35, но в JsonArray он равен 0. Что может быть не так?

    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

Попробуйте следующий подход. должно сработать.

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.

28
Ahsan Shah

В качестве дополнительного ответа его также можно сделать короче.

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

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

Не знаю, насколько хорошо это решение работает по сравнению с другими ответами, но это еще один способ сделать это, который довольно чистый и должно быть достаточно для большинства случаев.

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

Хотелось бы услышать от кого-то еще, хотя, и если да, то как это неэффективно на самом деле.

4
Danjoa

List <> - это обычный объект Java, который может быть успешно преобразован с использованием стандартного объекта gson api . Список в gson выглядит следующим образом:

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

Рассмотрим список объектов типа Model.class

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

Список в JSON

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

JSON в СПИСОК

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

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

Для тех, кто делает это в Kotlin , вы можете получить это так,

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

Используйте Google GSON 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);
}
0
anand kumar