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

时间:2013-09-17 19:04:04

标签: java arraylist gson arrays

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

6 个答案:

答案 0 :(得分:28)

尝试以下方法。应该工作。

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

答案 1 :(得分:4)

与其他答案相比,不知道这个解决方案的效果如何,但这是另一种方法,非常干净,对大多数情况来说应该足够了。

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

希望听到其他人的声音,不管它是否,以及如何实际效率低下。

答案 2 :(得分:2)

考虑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);

答案 3 :(得分:1)

列表与LT;&GT;是一个普通的java对象,可以使用标准的gson对象api成功转换。 gson中的列表如下所示:

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

对于在 Kotlin 中进行此操作的任何人,您都可以这样做,

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