如何在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)