Pregunta

Estoy haciendo uso bastante pesado de JSON análisis en una aplicación que estoy escribiendo. La mayor parte de lo que he hecho ya se implementa utilizando una función en la biblioteca JSONObject de Android (¿es JSON?).

JSONObject aparece para crear instancias de absolutamente todo en la cadena JSON ... incluso si no las usamos todos ellos.

Mi aplicación se ejecuta actualmente bastante bien, incluso en un G1.

Mi pregunta es la siguiente: son la velocidad y la memoria beneficios del uso de un analizador de flujo como Jackson pena todo el problema

?

Por problemas, me refiero a esto: Por lo que yo puedo decir, hay tres desventajas de usar Jackson en lugar de la incorporada en la biblioteca:

  1. La dependencia de una biblioteca externa. Esto hace que su .apk más grande en el final. No es un gran problema.
  2. Su aplicación es más frágil. Dado que el análisis no se realiza de forma automática, es más vulnerable a los cambios en el texto JSON que está de análisis sintáctico (tal vez estoy equivocado acerca de esto).
  3. Escribir código para analizar JSON a través de un analizador de flujo es feo y aburrido.
¿Fue útil?

Solución

Supongo que ha contestado más o menos a su propia pregunta. :)
El uso de la incorporada en el analizador JSON mí mismo y nunca han buscado una alternativa.

EDIT:. Ahora estoy usando una fina envoltura a base de anotación de DroidParts

Otros consejos

También estoy usando el analizador construir-en JSON en la mayoría de los casos, pero recientemente entré en un escenario en el que no encaja: Para algunas solicitudes de servicio web que recibo documentos JSON de más de 1 MB. Cargando éstos con la construcción, en JSON analizador requiere enormes cantidades de memoria principal y resultó en OutOfMemoryException varias veces. Para estos escenarios un analizador de streaming es la mejor opción (a pesar de que es más incómodo en uso) y la incorporada en el analizador JSON no ofrecerá la transmisión, pero sólo el estilo DOM-similares.

Para todos aquellos que buscan un analizador JSON en streaming para Android que puedo recomendar encarecidamente el uso de Google GSON . He intentado Jackson JSON en un primer momento y funcionó bien hasta que probé para construir la versión de mi aplicación: ProGuard informó de varios temas y la aplicación en ejecución estrellé con la misteriosa NullPointerException en el constructor de ObjectMapper de Jackson (aunque todo funcionaba bien en la depuración versión). Incluso después de unas horas de intentar torno a que no era capaz de solucionar este problema. entonces me pasa a GSON entonces y todo funcionó a las mil maravillas.

Por cierto:. La transmisión en sólo GSON frasco tiene un tamaño de tan sólo 14kb - así que nada que preocuparse realmente

Creo pregunta es si una función de uno es lo suficientemente bueno. Si lo es, seguro, minimizando las dependencias a menudo es una buena estrategia. lo suficientemente bueno puede referirse tanto a la eficiencia y facilidad de uso.

Por lo que vale, Jackson también tiene un modelo de árbol decente, así como el enlace de datos completos. modelo de árbol es significativamente más rápido que el analizador por defecto (análisis sintáctico es 3x-5x más rápido en J2SE, probablemente de manera similar en otras plataformas como Android, modelo de árbol en sí es probablemente más eficiente, así). O bien: si no desea que la dependencia a la segunda jarra (se necesita asignador de modelo de árbol y el enlace de datos), escribir su propio árbol para cubrir sus casos de uso es simple también. O bien utilizar HashMap / ArrayList / envolturas básicos, o tienen sus propias clases, si lo prefiere. Constructor sería tal vez 40 líneas de código superior.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top