如何将List<class>放入JSONObject中,然后读取该对象?

2022-09-02 21:25:18

我有一个我想转换为json对象,然后从json对象中遍历数据。List<class>

如果这只是一个,我可以做这样的事情:list<String>

JSONObject obj = new JSONObject();
List<String> sList = new ArrayList<String>();
sList.add("val1");
sList.add("val2");

obj.put("list", sList);

然后我可以像这样遍历列表:

JSONArray jArray = obj.getJSONArray("list");
for(int ii=0; ii < jArray.size(); ii++
  System.out.println(jArray.getString(ii));

使用该类的问题在于,我需要访问我的每个类元素中的数据,并且我不知道如何将其编码/遍历为JSON。任何帮助将不胜感激。list<class>


答案 1

调用而不是 。这将为您提供数组中 JSON 对象的句柄,然后您可以从那里获取对象的属性。getJSONObject()getString()

例如,要从 a 中获取属性“value”,其中有一个和:List<SomeClass>SomeClassString getValue()setValue(String value)

JSONObject obj = new JSONObject();
List<SomeClass> sList = new ArrayList<SomeClass>();

SomeClass obj1 = new SomeClass();
obj1.setValue("val1");
sList.add(obj1);

SomeClass obj2 = new SomeClass();
obj2.setValue("val2");
sList.add(obj2);

obj.put("list", sList);

JSONArray jArray = obj.getJSONArray("list");
for(int ii=0; ii < jArray.length(); ii++)
  System.out.println(jArray.getJSONObject(ii).getString("value"));

答案 2

让我们假设该类是 Data,具有两个对象 namedob,它们都是字符串

最初,检查列表是否为空。然后,将列表中的对象添加到 JSON 数组

JSONArray allDataArray = new JSONArray();
List<Data> sList = new ArrayList<String>();

    //if List not empty
    if (!(sList.size() ==0)) {

        //Loop index size()
        for(int index = 0; index < sList.size(); index++) {
            JSONObject eachData = new JSONObject();
            try {
                eachData.put("name", sList.get(index).getName());
                eachData.put("dob", sList.get(index).getDob());
            } catch (JSONException e) {
                e.printStackTrace();
            }
            allDataArray.put(eachData);
        }
    } else {
        //Do something when sList is empty
    }

最后,将 JSONArray 添加到 JSONObject

JSONObject root = new JSONObject();
    try {
        root.put("data", allDataArray);
    } catch (JSONException e) {
        e.printStackTrace();
    }

您也可以进一步将此数据作为字符串获取。

String jsonString = root.toString();