将 ArrayList<MyCustomClass> 转换为 JSONArray

新手上路,请多包涵

我有一个在 ArrayAdapter 中用于 ListView 的 ArrayList。我需要获取列表中的项目并将它们转换为 JSONArray 以发送到 API。我四处搜索,但没有找到任何解释这可能如何工作的东西,任何帮助将不胜感激。

更新 - 解决方案

这是我最终为解决问题所做的工作。

ArrayList 中的对象:

 public class ListItem {
    private long _masterId;
    private String _name;
    private long _category;

    public ListItem(long masterId, String name, long category) {
        _masterId = masterId;
        _name = name;
        _category = category;
    }

    public JSONObject getJSONObject() {
        JSONObject obj = new JSONObject();
        try {
            obj.put("Id", _masterId);
            obj.put("Name", _name);
            obj.put("Category", _category);
        } catch (JSONException e) {
            trace("DefaultListItem.toString JSONException: "+e.getMessage());
        }
        return obj;
    }
}

这是我转换它的方法:

 ArrayList<ListItem> myCustomList = .... // list filled with objects
JSONArray jsonArray = new JSONArray();
for (int i=0; i < myCustomList.size(); i++) {
        jsonArray.put(myCustomList.get(i).getJSONObject());
}

和输出:

 [{"Name":"Name 1","Id":0,"Category":"category 1"},{"Name":"Name 2","Id":1,"Category":"category 2"},{"Name":"Name 3","Id":2,"Category":"category 3"}]

希望有一天这对某人有所帮助!

原文由 pmko 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 459
2 个回答

如果我正确阅读了 JSONArray 构造函数,您可以从任何 Collection(arrayList 是 Collection 的子类)构建它们,如下所示:

 ArrayList<String> list = new ArrayList<String>();
list.add("foo");
list.add("baar");
JSONArray jsArray = new JSONArray(list);

参考:

原文由 Nanne 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是杰克逊的解决方案:

您可以使用 ObjectMapper 接收 JSON 字符串,然后将字符串转换为 JSONArray。

 import com.fasterxml.jackson.databind.ObjectMapper;
import org.json.JSONArray;

List<CustomObject> myList = new ArrayList<>();
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper.writeValueAsString(myList);
JSONArray jsonArray = new JSONArray(jsonString);

原文由 Deniz Husaj 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题