如何将自定义类的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();
主要的区别是,我已经改变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 } ], ...
使用谷歌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.class
types的对象列表
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)
- Gson反序列化JSON。 java.lang.RuntimeException:无法调用具有根本原因的public com.derp.procedure.model.SkeletonElement(),无参数)
- Base 64编码和解码示例代码