[英]How to convert automatically list of objects to JSONArray with Gson library in java?
假設我有以下自定義對象列表: 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,它具有基於org.Json.JSONArray
API
並且我想寫一些通用的方法來將實例轉換為JSONArray
/ JSONObject
謝謝,
這種方式對我有用:
將所有列表轉換為字符串。
String element = gson.toJson(
groupsList,
new TypeToken<ArrayList<GroupItem>>() {}.getType());
從字符串創建JSONArray
:
JSONArray list = new JSONArray(element);
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) 編寫代碼來創建JSONArray
和JSONObject
,它將從您的 Java 對象中包含:
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);
}
為什么要使用 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);
使用 Jackson for JSON to Object 或 Object to JSON
請參閱下一個鏈接傑克遜示例
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
StringWriter stringWriter = new StringWriter();
objectMapper.writeValue(stringWriter, groupsList );
System.out.println("groupsList JSON is\n"+stringWrite);
你不需要gson。 有一個接受集合的構造函數,所以只需:
ArrayList<GroupItem> groupsList =... ;
JSONArray JSONArray = new JSONArray(groupsList);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.