假设我有以下自定义对象列表:ArrayList<GroupItem>
其中GroupItem
是一些包含int
和String
变量的类。
我到目前为止尝试了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
谢谢,
答案 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对象中的JSONArray
和JSONObject
:
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");
});
};
});