Estoy descargando una cadena JSON y convertirlo en JSONArray. Im ponerlo en un listview y la necesidad de ser capaces de borrar de que listview más tarde, y desde JSONArray no tiene .método remove (Gracias Obama), estoy tratando de convertirlo en un arraylist.

aquí está mi JSON (la matriz.toString()):

[{"thumb_url":"tb-1370913834.jpg","event_id":"15","count":"44","event_tagline":"this is a tagline","event_name":"5th birthday","event_end":"1370919600","event_start":"1370876400"}]

Necesito meterlo en una matriz y ser capaz de llamar a las cuerdas por sus respectivas claves. Agradezco cualquier ayuda!

  • Cuando dices claves, no que implica un Diccionario (Map en Android) de algún tipo? Una matriz estará basada en el índice. Echa un vistazo a developer.android.com/reference/java/util/Map.html de cómo crear y utilizar.
  • Puede un mapa que se utiliza para llenar un listview con un custom baseadapter? Prefiero no utilizar los índices en el caso de que el JSON que nunca cambia el orden.
  • ListView va a obtener los objetos desde el adaptador de índice, por lo que en cualquier caso será necesario mantener la lista en un cierto orden. Si desea mantener el orden de las claves (y saber cuáles son las claves están en tiempo de compilación), usted puede codificar una serie de esas teclas en el orden que desee y el uso que de su orden al buscar desde el Mapa.
InformationsquelleAutor TheGeekNess | 2013-06-11

10 Comentarios

  1. 145
    ArrayList<String> listdata = new ArrayList<String>();     
    JSONArray jArray = (JSONArray)jsonObject; 
    if (jArray != null) { 
       for (int i=0;i<jArray.length();i++){ 
        listdata.add(jArray.getString(i));
       } 
    } 
    • Y listdata.add(jArray.optJSONObject(i)); si su listdata es un JSONObject arrayList. ArrayList<JSONObject> listdata = new ArrayList<JSONObject>();
    • Buen fragmento de código. En caso de que si alguien quiere: no es una clase auxiliar que convierte JSONObject/JSONArray a un Mapa estándar de la Lista/en el github gist.github.com/codebutler/2339666
    • ¿Por qué no utilizar un ArrayList<Object>?
    • ¿Cómo puedo manejar el Json Array está vacío. por favor me responda el hno.
    • ¿Hay alguna otra manera de hacer esto sin bucle?
  2. 49

    He hecho con Gson (por Google).

    Agregue la siguiente línea a su módulo de build.gradle:

    dependencies {
      //...
      //Note that `compile` will be deprecated. Use `implementation` instead.
      //See https://stackoverflow.com/a/44409111 for more info
      implementation 'com.google.code.gson:gson:2.8.2'
    }

    JSON cadena:

    private String jsonString = "[\n" +
    "        {\n" +
    "                \"id\": \"c200\",\n" +
    "                \"name\": \"Ravi Tamada\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"male\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        },\n" +
    "        {\n" +
    "                \"id\": \"c201\",\n" +
    "                \"name\": \"Johnny Depp\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"male\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        },\n" +
    "        {\n" +
    "                \"id\": \"c202\",\n" +
    "                \"name\": \"Leonardo Dicaprio\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"male\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        },\n" +
    "        {\n" +
    "                \"id\": \"c203\",\n" +
    "                \"name\": \"John Wayne\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"male\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        },\n" +
    "        {\n" +
    "                \"id\": \"c204\",\n" +
    "                \"name\": \"Angelina Jolie\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"female\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        },\n" +
    "        {\n" +
    "                \"id\": \"c205\",\n" +
    "                \"name\": \"Dido\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"female\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        },\n" +
    "        {\n" +
    "                \"id\": \"c206\",\n" +
    "                \"name\": \"Adele\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"female\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        },\n" +
    "        {\n" +
    "                \"id\": \"c207\",\n" +
    "                \"name\": \"Hugh Jackman\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"male\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        },\n" +
    "        {\n" +
    "                \"id\": \"c208\",\n" +
    "                \"name\": \"Will Smith\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"male\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        },\n" +
    "        {\n" +
    "                \"id\": \"c209\",\n" +
    "                \"name\": \"Clint Eastwood\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"male\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        },\n" +
    "        {\n" +
    "                \"id\": \"c2010\",\n" +
    "                \"name\": \"Barack Obama\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"male\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        },\n" +
    "        {\n" +
    "                \"id\": \"c2011\",\n" +
    "                \"name\": \"Kate Winslet\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"female\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        },\n" +
    "        {\n" +
    "                \"id\": \"c2012\",\n" +
    "                \"name\": \"Eminem\",\n" +
    "                \"email\": \"[email protected]\",\n" +
    "                \"address\": \"xx-xx-xxxx,x - street, x - country\",\n" +
    "                \"gender\" : \"male\",\n" +
    "                \"phone\": {\n" +
    "                    \"mobile\": \"+91 0000000000\",\n" +
    "                    \"home\": \"00 000000\",\n" +
    "                    \"office\": \"00 000000\"\n" +
    "                }\n" +
    "        }\n" +
    "    ]";

    ContactModel.java:

    public class ContactModel {
    public String id;
    public String name;
    public String email;
    }

    Código para la conversión de una cadena JSON a ArrayList<Model>:

    Nota: Usted tiene que importar java.lang.reflect.Type;:

    //Top of file
    import java.lang.reflect.Type;
    //...
    private void parseJSON() {
    Gson gson = new Gson();
    Type type = new TypeToken<List<ContactModel>>(){}.getType();
    List<ContactModel> contactList = gson.fromJson(jsonString, type);
    for (ContactModel contact : contactList){
    Log.i("Contact Details", contact.id + "-" + contact.name + "-" + contact.email);
    }
    }

    Espero que esto le ayudará.

    • TRES LÍNEAS DE…HECHO! Creo que debería haber sido aceptado responder ya que (a) es de tan sólo tres líneas de código que funciona maravillosamente, y (b) algunas de las respuestas que en realidad realizan un tipo de traducción de JSONArray a la Lista de<CustomObject>. Gracias!
    • Debe ser un JSONArray, el JSONElement parece no funcionar. así, el uso de la getAsJsonArray() método appearently. Gracias!
  3. 6

    trate de esta manera
    Simplemente bucle a través de los que, en la construcción de su propia matriz. Este código se supone que es un array de cadenas de caracteres, no debería ser difícil de modificar para satisfacer sus concreto de la matriz de estructura.

    JSONArray jsonArray = new JSONArray(jsonArrayString);
    List<String> list = new ArrayList<String>();
    for (int i=0; i<jsonArray.length(); i++) {
    list.add( jsonArray.getString(i) );
  4. 6

    Lugar de la conversión de la cadena JSON a un ArrayList o incluso un Mapa, usted puede crear una JSONObject sí mismo. Este objeto tiene la capacidad de obtener los valores de cadena por clave, como quieras y también a eliminar objetos.

    Para crear un JSONObject de un formato correcto cadena JSON, simplemente llame a la constructor apropiado.

    JSONObject json = new JSONObject(jsonString);
    • El problema que me encuentro con esta solución en particular, es que cuando se trata con JSONObject y JSONArray es un tiro de JSONException del. A veces es útil para pasar el contenido de un JSONArray a una función que no tienen que ser conscientes de JSON.
    • Estoy de acuerdo. Me gustaría utilizar el JSONObject como parte de analizar el texto JSON en un útil modelo objeto. Cualquier JSONException que es elevado indica un problema con la fuente de JSON, lo que significa que no se puede analizar en un JSONArray o JSONObject, digamos un modelo diferente de objeto.
  5. 6

    Tengo solución rápida. Basta con crear un archivo ArrayUtil.java

    import java.util.ArrayList;
    import java.util.Collection;
    import org.json.JSONArray;
    import org.json.JSONException;
    public class ArrayUtil
    {
    public static ArrayList<Object> convert(JSONArray jArr)
    {
    ArrayList<Object> list = new ArrayList<Object>();
    try {
    for (int i=0, l=jArr.length(); i<l; i++){
    list.add(jArr.get(i));
    }
    } catch (JSONException e) {}
    return list;
    }
    public static JSONArray convert(Collection<Object> list)
    {
    return new JSONArray(list);
    }
    }

    Uso:

    ArrayList<Object> list = ArrayUtil.convert(jArray);

    o

    JSONArray jArr = ArrayUtil.convert(list);
    • Qué debo hacer si necesita devolver un ArrayList<String>
    • Creo que no es posible echar ArrayList<Objeto> para ArrayList<Cadena>
  6. 4
     JSONArray array = new JSONArray(json);
    List<JSONObject> list = new ArrayList();
    for (int i = 0; i < array.length();list.add(array.getJSONObject(i++)));
  7. 3

    En Java 8,

    IntStream.range(0,jsonArray.length()).mapToObj(i->jsonArray.getString(i)).collect(Collectors.toList())
    • El único problema con esto es que JSONArray.getString(…) lanza una excepción que tiene que ser manejado dentro de la asignación, por lo que terminará con List<String> listOfStrings = IntStream.range(0, array.length()).mapToObj(i -> { try { return array.getString(i); } catch (JSONException e) { throw new AssertionFailedError("JSONArray is not a list of Strings! " + e.getMessage()); } }).collect(Collectors.toList()); que no es el más elegante. Así que voy a ir con un foreach 🙂
    • Esta es la mejor respuesta aquí (en mi humilde opinión), pero sería elegante si había una manera de que no se necesitan para acceder a la jsonArray referencia más de una vez.
  8. 2

    A hacer a mano, el uso de POJO.

    probar como esta..

    List<YourPojoObject> yourPojos = new ArrayList<YourPojoObject>();
    JSONObject jsonObject = new JSONObject(jsonString);
    YourPojoObject yourPojo = new YourPojoObject();
    yourPojo.setId(jsonObject.getString("idName"));
    ...
    ...
    yourPojos.add(yourPojo);
  9. 0
    public static List<JSONObject> getJSONObjectListFromJSONArray(JSONArray array) 
    throws JSONException {
    ArrayList<JSONObject> jsonObjects = new ArrayList<>();
    for (int i = 0; 
    i < (array != null ? array.length() : 0);           
    jsonObjects.add(array.getJSONObject(i++))
    );
    return jsonObjects;
    }
  10. 0

    Tengo solución rápida. Basta con crear un archivo ArrayUtil.java

    ObjectMapper mapper = new ObjectMapper(); 
    List<Student> list = Arrays.asList(mapper.readValue(jsonString, Student[].class));

    Uso:

    ArrayList<Object> list = ArrayUtil.convert(jArray);

    o

    JSONArray jArr = ArrayUtil.convert(list);

Dejar respuesta

Please enter your comment!
Please enter your name here