java - studio - save json android
ComparaciĆ³n de rendimiento y usabilidad de las bibliotecas Android JSON (7)
¿Cuál es la mejor biblioteca disponible para analizar JSON en Android? Sé que Android Framework tiene una biblioteca JSON integrada, y he oído hablar de GSON. Pero me pregunto si alguien ha comparado las diferentes opciones de JSON en Android y ha presentado una justificación para elegir una sobre la otra. Estoy pensando en el rendimiento y la usabilidad como el criterio principal.
Android JSON es muy funcional, pero no tiene campanas ni silbatos. Donde GSON le permite especificar asignaciones entre sus clases y su representación json. También tiene una muy buena conversión automática de cualquier valor primitivo a json, sin ningún trabajo adicional de su parte.
La recompensa con GSON es si tiene mucha comunicación JSON u objetos complejos que requieren una comprobación de valor para evitar valores ilegales (como NaN) y otros casos en los que java-to-JSON es menos directo.
Pero si solo necesita enviar y recibir un objeto json simple, la biblioteca nativa hace el truco bastante respetable. Lo estoy usando en mi proyecto actual para publicar puntajes altos en un servidor.
Bueno, a veces el rendimiento y la usabilidad pueden estar en desacuerdo, pero he descubierto que GSON es más fácil de usar que alternativas como Jackson , org.json y otros. Actualmente estoy serializando datos JSON que tienen objetos y listas de 3 o 4 niveles de profundidad. Dicho esto, he adaptado mi JSON para que sea más adecuado para la serialización, pero en general GSON ha sido excelente.
Esta respuesta se ve desde la perspectiva de la memoria, ya que también se puede considerar rendimiento :-P.
Acabo de implementar el análisis de un archivo JSON de 70 KB en Android, analizando una serie de objetos que deberían cargar desde cero o actualizar objetos de enlace de datos previamente presentes, en todo HTTP.
El mayor inconveniente con el paquete org.json incorporado para Android runtime 3 era
- el constructor JSONTokener solo acepta un String, no Reader
- la falta de soporte práctico para pull-parsing
Esto normalmente significa que debe mantener todo el archivo en la memoria (piense en un tamaño de bytes de 2x) y además mantener todos los objetos JSON resultantes en la memoria al mismo tiempo, antes de comenzar a enlazar sus datos. El peor de los casos es el tamaño de archivo 2x, los objetos JSON y los objetos de enlace de datos, generalmente al menos el doble del requisito de memoria.
Si realiza un análisis de un lector, puede bajarlo a 1x. Esa es la cosa más importante que puedes hacer desde la perspectiva de la memoria.
Y, sorpresa sorpresa, si vas con algunas clases más modernas, como Jackson o simplemente las últimas fuentes de org.json, podrás sortear estas dos limitaciones sin problemas, un tiempo de ejecución de Android más tarde también parece tener alguna utilidad clases para JSON pull-parsing.
Si está atascado con un viejo tiempo de ejecución, y quiere mantener la huella de la aplicación, como yo, puede copiar el JSONTokener de org.json y modificar su ciclo de análisis de nivel superior (en mi caso, el ciclo de análisis de matriz) y hacer el enlace de datos en cada miembro de la matriz en lugar de toda la matriz a la vez. De esta forma reutilizarás los objetos JSON que ya están en el tiempo de ejecución de Android tanto como sea posible y aún obtendrás el efecto de transmisión (al precio de agregar identificadores a cada objeto de nivel superior).
Estoy probando GSON y he intentado con otros.
GSON hace un excelente trabajo de serialización (conversión de objetos a json) objetos complejos sin básicamente ningún cambio o pensamiento de su parte, pero es un poco lento y consume mucha memoria.
El sitio web GSON Roadmap indica que esperan que la versión 2.0 solucione algunos problemas de rendimiento y que saldrá a la venta en octubre de 2011 (que finalizará pronto). Así que espero que entreguen eso porque realmente lo necesito.
Otras bibliotecas (lo siento, no puedo recordar nombres en este momento) tampoco parecen serializarse. Algunos solo pueden mirar variables públicas en sus clases o simplemente recurrir a métodos públicos que se parecen a getters / setters. Gson no lo hace de esa manera, y lo agarrará todo.
Todavía no he hecho mucho en el lado de deserialización (convertir JSON a objetos Java).
GSON es realmente simple de usar y si el rendimiento no es un problema, es bastante agradable. Jackson embargo https://github.com/eishay/jvm-serializers/wiki Jackson es https://github.com/eishay/jvm-serializers/wiki y no es mucho más esfuerzo de usar. Como he dicho en el pasado en otra pregunta relacionada, obtuve grandes ganancias de rendimiento (al trabajar con grandes conjuntos de JSON) simplemente cambiando a Jackson de GSON.
Si bien hay un puñado de API Java-to / from-JSON que proporcionan una vinculación fácil (básica) entre JSON y una estructura de datos Java arbitraria, Jackson y Gson son, con mucho, las opciones más sofisticadas (capaces) y ricas en funciones.
En julio de 2011, publiqué una serie de varias partes en mi blog comparando el uso de Gson versus Jackson, pasando por las características tal como se organizaron en la Guía del usuario de Gson, incluidos ejemplos de implementaciones comparables en Jackson (y de implementaciones en Gson, donde la Guía del usuario de Gson estaba incompleta o rota).
La sexta parte de la serie proporciona enlaces de navegación fáciles para la comparación, así como una lista de comparación de resumen. http://programmerbruce.blogspot.com/2011/07/gson-v-jackson-part-6.html
Esta es la comparación más completa del uso de Gson versus Jackson para las tareas comunes JSON-to / from-Java conocidas.
Como se mencionó, las comparaciones de rendimiento de varias API Java-to / from-JSON están disponibles en https://github.com/eishay/jvm-serializers/wiki . El lanzamiento actual de Gson (2.0) muestra ser 16 veces más lento que el lanzamiento actual de Jackson (1.9.2) al serializar y deserializar una estructura JSON de 500 bytes, usando esfuerzos de implementación muy comparables (solo una o dos líneas de código) .
Martin Adamek publicó algunos resultados de rendimiento de varias API que se ejecutan en Android en http://martinadamek.com/2011/01/31/comparison-of-json-parsers-performance-on-android/ y http://martinadamek.com/2011/02/04/json-parsers-performance-on-android-with-warmup-and-multiple-iterations/
prueba android-async-http
- Realice solicitudes HTTP asíncronas, maneje las respuestas en devoluciones de llamada anónimas
- Las solicitudes HTTP suceden fuera del hilo de la interfaz de usuario
- Las solicitudes usan un threadpool para limitar el uso concurrente de recursos
- Constructor de parámetros GET / POST (Parámetros de solicitud)
- Subidas múltiples de archivos sin bibliotecas de terceros adicionales
- Tamaño pequeño para su aplicación, solo 25kb para todo
- Reintentos automáticos de solicitudes inteligentes optimizados para conexiones móviles irregulares
- Soporte de descodificación automática de respuesta gzip para solicitudes súper rápidas
- Descarga de archivos binarios (imágenes, etc.) con BinaryHttpResponseHandler
- Análisis integrado de la respuesta en JSON con JsonHttpResponseHandler
- Tienda de cookies persistente, guarda las cookies en las Preferencias Compartidas de su aplicación
y también puedes probar fastjson que es un procesador json rápido.