如何在Java中将自定义类的ArrayList转换为JsonArray?

我试图将自定义类的ArrayList转换为JsonArray。 以下是我的代码。 它执行正常,但一些JsonArray元素为零,即使它们是ArrayList中的数字。 我试图将它们打印出来。 就像ArrayList中的customerOne年龄是35但在JsonArray中它是0。 可能有什么不对?

ArrayList customerList = CustomerDB.selectAll(); Gson gson = new Gson(); JsonElement element = gson.toJsonTree(customerList , new TypeToken<List>() {}.getType()); JsonArray jsonArray = element.getAsJsonArray(); 

尝试以下方法。 应该管用。

 List customerList = CustomerDB.selectAll(); Gson gson = new Gson(); JsonElement element = gson.toJsonTree(customerList, new TypeToken>() {}.getType()); if (! element.isJsonArray()) { // fail appropriately throw new SomeException(); } JsonArray jsonArray = element.getAsJsonArray(); 

主要的区别是,我已将ArrayList更改为List

作为一个额外的答案,它也可以缩短。

 List customerList = CustomerDB.selectAll(); JsonArray result = (JsonArray) new Gson().toJsonTree(customerList, new TypeToken>() { }.getType()); 

不知道这个解决方案与其他答案相比表现得有多好,但这是另一种方法,它非常干净,对大多数情况来说应该足够了。

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

我希望能听到别人的意见,不管这实际上是否有效率低。

List <>是一个普通的java对象,可以使用标准的gson对象api成功转换。 gson中的列表如下所示:

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

考虑Model.class类型的对象列表

 ArrayList listOfObjects = new ArrayList(); 

列出到JSON

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

JSON到列表

  Type listType = new TypeToken>() {}.getType(); List myModelList = new Gson().fromJson(jsonText , listType); 

使用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 metrices = new ArrayList(); // 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); } 

对于在Kotlin这样做的人来说,你可以这样做,

 val gsonHandler = Gson() val element: JsonElement = gsonHandler.toJsonTree(yourListOfObjects, object : TypeToken>() {}.type)