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

我正在尝试将自定义类的ArrayList转换为JsonArray。 以下是我的代码。 它执行得很好,但是一些JsonArray元素即使是ArrayList中的数字也是零。 我试图把它们打印出来。 像ArrayList中的customerOne age是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(); 

主要的区别是,我已经改变ArrayListList

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

 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 } ], ... 

使用谷歌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); } 

考虑一下Model.classtypes的对象列表

 ArrayList listOfObjects = new ArrayList(); 

列表到JSON

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

JSON到列表

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

对于任何在Kotlin做的人,你都可以这样做,

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