Comparação do Analisador JSON para Objective-C (JSON Framework, YAJL, TouchJSON, etc)


142

Tanto quanto eu sei, existem três Analisadores JSON para Objective-C, JSON Framework , YAJL e Touch JSON . Então, esses três teriam suas próprias características.

Por exemplo:
YAJL pode ser usado como um analisador de estilo SAX.
O JSON Framework tem uma história relativamente longa e é amplamente utilizado.
O toque JSON analisa NSData em vez de NSString.

Além disso, tanto quanto eu testei, o resultado da comparação de desempenho é o seguinte:
[rápido] YAJL> JSON Framework> Touch JSON [lento].

Se você conhece os prós e os contras desses analisadores JSON, poderia me dizer?
Por fim, se você conhece outro Analisador JSON, informe-me.


1
Meu voto! Esta é uma grande pergunta. Gostaria que alguns especialistas respondessem a este. Eu tenho usado o JSON Framework o tempo todo, mas estou ansioso para conhecer os prós e os contras de outros analisadores.
Chintan Patel

Obrigado Chintan. Também estou usando o JSON Framework e não tenho queixas. Mas espero que alguém possa nos dar uma boa resposta.
tomute

5
Que tal um analisador JSON de streaming para Obj-C? Eu gostaria de ter um analisador que informasse a delegar quando um novo objeto foi analisado, por exemplo, quando você está baixando um JSON grande de um servidor, você pode começar a processar a parte que foi recebida. Também pode diminuir o espaço ocupado pela memória.
Martijn Thé

YAJL seria exatamente o que você deseja. rel.me/2009/06/15/yajl-json-parser-objective-c-bindings
tomute

1
Uma revisão abrangente .
ohho

Respostas:


59

Se você está procurando velocidade, dê uma olhada no JSONKit . É (geralmente) muito mais rápido que as bibliotecas JSON já mencionadas, geralmente uma ordem de magnitude mais rápida. E por causa de seu "cache de objeto instanciado recentemente", ele (novamente) geralmente usa menos memória também.


2
Posso confirmar isso :) Nos meus testes, o JSONKit foi quase duas vezes mais rápido que o YAJL e 50% mais rápido que o JSON Framework, mas aparentemente os dados que usei para o teste foram um tipo de pior cenário para o JSONKit.
Kuba Süder

2
Segundo isso. Lembre-se de definir o sinalizador NS_BLOCK_ASSERTIONS nas suas versões do Release. Melhora ainda mais a velocidade.
DenTheMan

1
O AFAICT JSONKit não suporta a análise baseada em fluxo; portanto, se esse for um problema, convém usar o json-framework ou o YAJL.
Frank Schmitt

JSONKit para desempenho. Referece: uma revisão abrangente por cocoanetics.com.
ohho 28/02

2
A partir de agora, parece que o JSONKit foi abandonado pelo autor. Há alguns problemas com a versão mais recente do XCode, várias solicitações pull para corrigi-lo e nenhuma delas foi aceita.
Luke The Obscure

12

Considerando uma comparação que fiz , a biblioteca mais rápida é JSONKit, seguida por NSJSONSerialization (agora API pública) e NextiveJSON. SBJSON e TouchJSON são um pouco mais lentos que as 3 bibliotecas anteriores.

A comparação foi feita usando um iPhone 4S com iOS 5.0.1.


1
Voto positivo por mencionar que NSJSONSerialization faz parte da API pública! Vou manter isso, porque não haverá nenhum problema com a manutenção.
Johannes

idem. A NSJSONSerialization , para mim, é a melhor maneira de seguir - pelo menos para segmentar o iOS 5.0 ou superior.
Quintin Willison

O link na resposta está quebrado. Por favor, conserte
Ossir

5

Há também este analisador :

Não me lembro de como me deparei com essa, mas parecia leve e simples, então pensei que se adapta às minhas necessidades. Eu evento bifurcado, a fim de adicionar a inicialização do NSData. Como eu precisava analisar pequenas respostas, não me importei com o desempenho. Seria interessante saber como ele funciona.


Este é o analisador JSON mais leve e simples que eu usei até agora, altamente recomendado.
Kelvin

Uau, fez o meu dia. Um analisador tão simples e elegante!
Thandasoru 26/09/11

3

Acho que o JSONKit é mais rápido que o YAJL e o YAJL é mais rápido que o Touch JSON e a classe IOS5 da classe NSJSONSerialization é muito mais rápida. A NSJSONSerialization não precisa usar APIs de terceiros.




0

Por que não dar uma olhada nos benchmarks de akosma nos analisadores, onde ele compara diferentes tipos de analisadores. Se um analisador estiver ausente, você também poderá adicioná-lo aos testes, pois o código dele é de código aberto.

iPhoneWebServicesClient

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.