如何在java中使用Gson库自动将对象列表转换为JSONArray?

时间:2014-03-01 19:07:31

标签: java json gson

假设我有以下自定义对象列表:ArrayList<GroupItem>其中GroupItem是一些包含intString变量的类。

我到目前为止尝试了Gson库,但这并不是我想要的。

ArrayList<GroupItem> groupsList = /* ... */
Gson gson = new Gson();
JsonElement element = gson.toJsonTree(groupsList, new TypeToken<ArrayList<GroupItem>>() {}.getType());

JsonArray jsonArray = element.getAsJsonArray();

我的目标是以某种方式获得JSONArray(org.Json.JSONArray)。有什么想法吗?

[编辑]

我的项目是使用Cordova的Android,其API基于org.Json.JSONArray

我想写一些通用的方法将实例转换为JSONArray / JSONObject

谢谢,

5 个答案:

答案 0 :(得分:15)

这种方式对我有用:

将所有列表转换为String。

String element = gson.toJson(
                    groupsList,
           new TypeToken<ArrayList<GroupItem>>() {}.getType());

从字符串创建JSONArray

    JSONArray list = new JSONArray(element);

答案 1 :(得分:6)

Android中包含的基于org.json的类没有任何与将Java POJO转换为JSON或从JSON转换相关的功能。

如果你有一个类(List<GroupItem>)的列表,你绝对需要将其转换为org.json.JSONArray,你有两个选择:

A)使用Gson或Jackson转换为JSON,然后将该JSON解析为JSONArray

List<GroupItem> list = ...
String json = new Gson().toJson(list);
JSONArray array = new JSONArray(json);

B)编写代码以创建它将包含在Java对象中的JSONArrayJSONObject

JSONArray array = new JSONArray();
for (GroupItem gi : list)
{
    JSONObject obj = new JSONObject();
    obj.put("fieldName", gi.fieldName);
    obj.put("fieldName2", gi.fieldName2);
    array.put(obj);
}

答案 2 :(得分:1)

为什么要使用GSON转换为org.json类?您也不需要编写任何自定义代码来获取JSONArray。 org.json api提供了一种方法。

  LinkedList list = new LinkedList();
  list.add("foo");
  list.add(new Integer(100));
  list.add(new Double(1000.21));
  list.add(new Boolean(true));
  list.add(null);
  JSONArray jsonArray = new JSONArray(list);
  System.out.print(jsonArray);

答案 3 :(得分:1)

你不需要gson。有一个constructor需要一个集合,所以只需:

ArrayList<GroupItem> groupsList =... ;
JSONArray JSONArray = new JSONArray(groupsList);

答案 4 :(得分:1)

使用Jackson for JSON to Object或Object to JSON

请参阅下一个链接Jackson examples

app.controller('quizController', function($scope, $http,$sce){

  $scope.quizStatus = function(quiz) {
    var data = JSON.stringify({id : quiz.id });
     $http.post('./quizStatus', data ).success(function(data) {
          // data = 0 / 1;
          alert("Status Changed");
       });
  };

});