Как поместить 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);