2009-12-30 17 views
6

Así que tengo este JSON, que entonces mi actividad recupera en una cadena:Analizar JSON en una salida amistosa ListView

{"popular": 
     {"authors_last_month": [ 
     { 
      "url":"http://activeden.net/user/OXYLUS", 
      "item":"OXYLUS", 
      "sales":"1148", 
      "image":"http://s3.envato.com/files/15599.jpg" 
     }, 
     { 
      "url":"http://activeden.net/user/digitalscience", 
      "item":"digitalscience", 
      "sales":"681", 
      "image":"http://s3.envato.com/files/232005.jpg" 
     } 
     { 
      ... 
     } 
     ], 
     "items_last_week": [ 
     { 
      "cost":"4.00", 
      "thumbnail":"http://s3.envato.com/files/227943.jpg", 
      "url":"http://activeden.net/item/christmas-decoration-balls/75682", 
      "sales":"43", 
      "item":"Christmas Decoration Balls", 
      "rating":"3", 
      "id":"75682" 
     }, 
     { 
      "cost":"30.00", 
      "thumbnail":"http://s3.envato.com/files/226221.jpg", 
      "url":"http://activeden.net/item/xml-flip-book-as3/63869", 
      "sales":"27", 
      "item":"XML Flip Book/AS3", 
      "rating":"5", 
      "id":"63869" 
     }, 
     { 
      ... 
     }], 
     "items_last_three_months": [ 
     { 
      "cost":"5.00", 
      "thumbnail":"http://s3.envato.com/files/195638.jpg", 
      "url":"http://activeden.net/item/image-logo-shiner-effect/55085", 
      "sales":"641", 
      "item":"image logo shiner effect", 
      "rating":"5", 
      "id":"55085" 
     }, 
     { 
      "cost":"15.00", 
      "thumbnail":"http://s3.envato.com/files/180749.png", 
      "url":"http://activeden.net/item/banner-rotator-with-auto-delay-time/22243", 
      "sales":"533", 
      "item":"BANNER ROTATOR with Auto Delay Time", 
      "rating":"5", 
      "id":"22243"}, 
     { 
      ... 
     }] 
    } 
} 

Se puede acceder here así, a pesar de que ya es bastante una cadena larga, me Recorté lo anterior para mostrar lo que se necesita.

Básicamente, quiero poder acceder a los elementos desde "items_last_week" y crear una lista de ellos - originalmente mi plan era tener la 'miniatura' a la izquierda con el 'elemento' al lado, pero desde Jugar con el SDK hoy parece demasiado difícil o imposible de lograr, así que estaría más que contento con solo tener los datos del 'elemento' de 'items_last_week' en la lista.

Viniendo de php Tengo dificultades para usar cualquiera de las bibliotecas JSON que están disponibles para Java, ya que parece ser mucho más que una línea de código que necesitaré deserializar (creo que esa es la palabra correcta) el JSON, y todos parecen requerir algún tipo de clase adicional, aparte del script JSONArray/JSONObject que tengo, que no le gusta el hecho de que items_last_week esté anidado (de nuevo, creo que esa es la terminología JSON) y toma un tiempo horrible hora de ejecutar en el emulador de Android.

Entonces, en efecto, necesito una forma (preferiblemente simple) de pasar los datos de items_last_week a un ListView. Entiendo que necesitaré un adaptador personalizado que probablemente sepa cómo funciona, pero no puedo entender, no importa la cantidad de días que haya pasado tratando de resolverlo, cómo acceder a ciertas partes de una cadena JSON.

+0

¿Requiere ayuda JSON? Entonces puedes agregar la etiqueta Json a tu pregunta. – tbruyelle

+0

También sería apropiada una etiqueta "java". –

Respuesta

9

originalmente mi plan era que el 'miniatura' de la izquierda con el 'elemento' al lado de él, sino de jugar un poco con el SDK de hoy parece demasiado difícil o imposible de lograr este

No es imposible, pero será tedioso hacerlo bien, a menos que o use something that already wraps up that pattern para usted (y que, afortunadamente, es razonablemente "correcto"). En la Web, los problemas de rendimiento/ancho de banda fueron el problema del usuario: en el móvil, ese es su problema.

, ya que parece ser mucho más que una línea de código que voy a necesitar deserializar (creo que esa es la razón palabra) el JSON

new JSONObject(data) es una línea de código. Ahora, buscando el JSON, que supongo que está haciendo desde la URL mencionada, serán varias líneas de código. Ni el análisis sintáctico de JSON ni su obtención de Internet son exclusivos de Android; todo eso se vería igual en una aplicación de escritorio de Java o un servlet de Java, o lo que sea.

aparte de la secuencia de comandos JSONArray/JSONObject tengo que no le gusta el hecho de que items_last_week está anidado

No he tenido un problema al analizar JSON con estructuras como sus exposiciones de archivo. Además, esto no es exclusivo de Android: el analizador JSON se utiliza en muchos otros proyectos basados ​​en Java.

y toma un tiempo tremendamente largo para ejecutarse en el emulador de Android

La velocidad del emulador está ligada a la velocidad de la máquina de desarrollo. Para mí, el emulador suele ser más lento que el hardware del teléfono real ... y mi escritorio es de cuatro núcleos. Tenga en cuenta que el emulador pretende ser un chipset ARM que se ejecuta en su PC, convirtiendo códigos de operación ARM en códigos de operación x86 sobre la marcha, por lo que no va a ser rápido y no aprovechará varios núcleos muy bien.

Así que, en efecto, necesito un ( preferentemente sencilla) manera de pasar los datos items_last_week a un ListView.

No hay nada realmente incorporado en Android para tomar una estructura JSON arbitraria, con datos arbitrarios, y verterla directamente en un ListView. Esto no es exclusivo de JSON: XML mostraría un fenómeno similar.

Las opciones son:

  1. Crea una alfombrilla de ListAdapter que envuelve a la analizada JSON.
  2. Convierta el JSON analizado en un MatrixCursor (piense en una matriz 2D de datos) y use un SimpleCursorAdapter.
  3. Convierta el JSON analizado en un ArrayList<String> y use un ArrayAdapter.

A corto plazo, la opción n. ° 3 es probablemente la más simple.

entiendo que necesitaré un adaptador personalizado el cual es probable que pueda conseguir mi cabeza, pero no puedo entender, no importa qué parte del día que he solo dedicado a tratar de averiguarlo, cómo acceder a ciertas partes de una cadena JSON ...

Y esa pregunta es demasiado vaga para ayudar. Puede plantearse abrir una pregunta separada, etiquetada para Java y JSON, en la que ingrese los detalles de dónde tiene problemas con el analizador json.org.

+0

Muy buen desglose de la pregunta de OP. Conciso y una respuesta/análisis parte por parte. –

1

En realidad, acabo de responder una pregunta sobre esto. Compruébelo en busca de un código muy simple para un adaptador personalizado para manejar JSON.

JSONAdapter