簡體   English   中英

如何使用Java中的Gson庫將對象列表自動轉換為JSONArray?

[英]How to convert automatically list of objects to JSONArray with Gson library in java?

假設我有以下自定義對象列表: 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,它具有基於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) 編寫代碼來創建JSONArrayJSONObject ,它將從您的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM