Comparación de JSON Parser para Objective-C (JSON Framework, YAJL, TouchJSON, etc.)

142

Que yo sepa, hay tres analizadores JSON para Objective-C, JSON Framework , YAJL y Touch JSON . Entonces, estos tres tendrían sus propias características.

Por ejemplo:
YAJL se puede usar como un analizador de estilo SAX.
JSON Framework tiene una historia relativamente larga y se usa ampliamente.
Toque JSON analiza NSData en lugar de NSString.

Además, hasta donde probé, el resultado de la comparación de rendimiento es el siguiente:
[rápido] YAJL> Marco JSON> Toque JSON [lento].

Si conoce los pros y los contras de estos analizadores JSON, ¿podría decirme?
Por último, si conoce a algún otro JSON Parser, dígamelo.

Silenciar
fuente
1
Mi voto arriba! Esta es una gran pregunta. Me encantaría que algunos expertos respondan a esta. He estado usando JSON Framework todo el tiempo, pero estoy ansioso por conocer las ventajas y desventajas de otros analizadores.
Chintan Patel
Gracias Chintan También estoy usando JSON Framework y no me quejo. Pero, espero que alguien nos pueda dar una buena respuesta.
Tomute
55
¿Qué pasa con un analizador de JSON de transmisión para Obj-C? Me gustaría tener un analizador que le diga que es delegado cuando se analiza un nuevo objeto, por ejemplo, cuando descarga un JSON grande de un servidor, puede comenzar a procesar la parte que se ha recibido. También podría reducir la huella de memoria.
Martijn Thé
YAJL sería exactamente lo que quieres. rel.me/2009/06/15/yajl-json-parser-objective-c-bindings
mañana
1
Una revisión exhaustiva .
ohho

Respuestas:

59

Si busca velocidad, eche un vistazo a JSONKit . Es (generalmente) mucho más rápido que las bibliotecas JSON ya mencionadas, a menudo un orden de magnitud más rápido. Y debido a su "caché de objetos instanciados recientemente", (nuevamente, por lo general) también usará menos memoria.

johne
fuente
2
Puedo confirmar esto :) En mis pruebas, JSONKit fue casi dos veces más rápido que YAJL y 50% más rápido que JSON Framework, pero aparentemente los datos que usé para la prueba fueron una especie de peor escenario para JSONKit.
Kuba Suder
2
En segundo lugar eso. Recuerde configurar el indicador NS_BLOCK_ASSERTIONS en sus versiones de lanzamiento. Mejora aún más la velocidad.
DenTheMan
1
AFAICT JSONKit no admite el análisis basado en secuencias, por lo que si ese es un problema, es posible que desee utilizar json-framework o YAJL.
Frank Schmitt
JSONKit para rendimiento. Referencia: una revisión exhaustiva por cocoanetics.com.
ohho
2
A partir de ahora, parece que JSONKit ha sido abandonado por el autor. Hay algunos problemas con la última versión de XCode, numerosas solicitudes de extracción para solucionarlo, y ninguno de ellos ha sido aceptado.
Luke The Obscure
12

Teniendo en cuenta una comparación que hice , la biblioteca más rápida es JSONKit, seguida de NSJSONSerialization (ahora API pública) y NextiveJSON. SBJSON y TouchJSON son un poco más lentos que las 3 bibliotecas anteriores.

La comparación se ha realizado utilizando un iPhone 4S con iOS 5.0.1.

bontoJR
fuente
1
¡Haga un voto positivo por mencionar que NSJSONSerialization es parte de la API pública! Seguiré con esto, porque no habrá ningún problema con el mantenimiento.
Johannes
ídem. La serialización de NSJSONS , para mí, es el camino más sensato, al menos para apuntar a iOS 5.0 y versiones posteriores.
Quintin Willison
El enlace en respuesta está roto. Por favor, corríjalo
Ossir
5

También hay este analizador :

No recuerdo cómo me topé con este, pero parecía ligero y simple, así que pensé que se adaptaba a mis necesidades. El evento lo bifurqué para agregar inicialización desde NSData. Como necesitaba analizar pequeñas respuestas, no me importaba el rendimiento. Sin embargo, sería interesante saber cómo funciona.

romano
fuente
Este es el analizador JSON más ligero y simple que he usado hasta ahora, muy recomendable.
Kelvin
Wow, me alegró el día. ¡Un analizador tan simple y elegante!
thandasoru
3

Creo que JSONKit es más rápido que YAJL y YAJL es más rápido que Touch JSON y la clase IOS5 La clase NSJSONSerialization es mucho más rápida. NSJSONSerialization no tiene necesidad de utilizar ninguna API de terceros.

Arvind
fuente
0

¿Por qué no echar un vistazo a los puntos de referencia de akosma en los analizadores donde compara diferentes tipos de analizadores? Si falta un analizador, también podría agregarlo a las pruebas, ya que su código es de código abierto.

iPhoneWebServicesClient

codeclash
fuente