【问题标题】:How to convert automatically list of objects to JSONArray with Gson library in java?java - 如何使用Java中的Gson库将对象列表自动转换为JSONArray?
【发布时间】:2014-03-01 19:07:30
【问题描述】:

假设我有以下自定义对象列表: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)。有什么想法吗?

[编辑]

我的项目是带有基于 org.Json.JSONArray 的 API 的 Cordova 的 Android

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

谢谢,

【问题讨论】:

标签: java json gson


【解决方案1】:

这种方式对我有用:

将所有列表转换为字符串。

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

从字符串创建JSONArray

    JSONArray list = new JSONArray(element);

【讨论】:

  • 接受的答案返回一个空数组,这可行
【解决方案2】:

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

如果您有某个类 (List&lt;GroupItem&gt;) 的列表,并且您绝对需要将其转换为 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 对象中创建 JSONArrayJSONObjects:

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

【讨论】:

    【解决方案3】:

    为什么要使用 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);
    

    【讨论】:

      【解决方案4】:

      使用 Jackson for JSON to Object 或 Object to JSON

      查看下一个链接Jackson examples

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • List 上不需要泛型。
        • 我得到了正确的列表长度,但里面有空值。看我的回答
        • 有时它同样会抛出堆栈溢出异常。
        • @Ranjitsinh 你不会得到任何帮助来发布你遇到的问题的一点提示。您需要提出一个完整的问题。
        • @weston 我没有任何问题,但是每当我使用 List 到 json 数组时,我都会遇到 stackoverflow 异常,所以我以不同的方式传递对象。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-26
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多