java - ¿Cómo colocar una lista<clase> en un objeto JSON y luego leer ese objeto?
class (5)
Así es como lo hago usando Google Gson. No estoy seguro si hay una forma más sencilla de hacerlo (con o sin una biblioteca externa).
Type collectionType = new TypeToken<List<Class>>() {
} // end new
.getType();
String gsonString =
new Gson().toJson(objList, collectionType);
Tengo una List<class>
que me gustaría convertir en un objeto json y luego atravesar los datos fuera del objeto json.
Si esto fuera solo una list<String>
podría hacer algo como:
JSONObject obj = new JSONObject();
List<String> sList = new ArrayList<String>();
sList.add("val1");
sList.add("val2");
obj.put("list", sList);
Entonces pude recorrer la lista como:
JSONArray jArray = obj.getJSONArray("list");
for(int ii=0; ii < jArray.size(); ii++
System.out.println(jArray.getString(ii));
El problema con el uso de la clase es que necesito tener acceso a los datos dentro de cada elemento de clase de mi list<class>
y no sé cómo codificarlo / atravesarlo en JSON. Cualquier ayuda sería muy apreciada.
Llame a getJSONObject()
lugar de getString()
. Eso le dará un control sobre el objeto JSON en la matriz y luego podrá sacar la propiedad del objeto desde allí.
Por ejemplo, para obtener la propiedad "valor" de una List<SomeClass>
donde SomeClass
tiene un String getValue()
y 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"));
Podría usar un serializador / deserializador JSON como flexjson para hacer la conversión por usted.
Solo para actualizar este hilo, aquí está cómo agregar una lista (como una matriz json) en JSONObject. Por favor, sustituya YourClass con su nombre de clase;
List<YourClass> list = new ArrayList<>();
JSONObject jsonObject = new JSONObject();
org.codehaus.jackson.map.ObjectMapper objectMapper = new
org.codehaus.jackson.map.ObjectMapper();
org.codehaus.jackson.JsonNode listNode = objectMapper.valueToTree(list);
org.json.JSONArray request = new org.json.JSONArray(listNode.toString());
jsonObject.put("list", request);
Supongamos que la clase es Datos con el nombre de dos objetos y dob, que son ambas cadenas .
Inicialmente, compruebe si la lista está vacía. Luego, agregue los objetos de la lista a un 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
}
Finalmente, agregue el JSONArray a un JSONObject .
JSONObject root = new JSONObject();
try {
root.put("data", allDataArray);
} catch (JSONException e) {
e.printStackTrace();
}
También puede obtener estos datos como una cadena también.
String jsonString = root.toString();