Как поместить List <class> в JSONObject и затем прочитать этот объект?

У меня есть List<class>, который я хотел бы преобразовать в json-объект, а затем выполнить перемещение данных из объекта json.

Если бы это было всего лишь 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));

Проблема с использованием класса заключается в том, что мне нужно иметь доступ к данным в каждом элементе класса моего List<class>, и я не знаю, как его кодировать/перемещать в JSON. Любая помощь будет принята с благодарностью.

Ответы

Ответ 1

Вызовите getJSONObject() вместо getString(). Это даст вам дескриптор объекта JSON в массиве, а затем вы можете отключить его от объекта.

Например, чтобы получить свойство "значение" из List<SomeClass>, где SomeClass имеет String 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

Предположим, что класс Данные с двумя объектами name и dob, которые являются строками.

Сначала проверьте, пуст ли список. Затем добавьте объекты из списка в JSONArray

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

Ответ 3

Вы можете использовать сериализатор/десериализатор JSON, например flexjson, чтобы выполнить преобразование для вас.

Ответ 4

Вот как я это делаю, используя Google Gson. Я не уверен, если есть более простой способ сделать это (с или без внешней библиотеки).

 Type collectionType = new TypeToken<List<Class>>() {
                } // end new
                        .getType();

                String gsonString = 
                new Gson().toJson(objList, collectionType);