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.

tomute
fonte
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.

johne
fonte
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.

bontoJR
fonte
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.

romano
fonte
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.

Arvind
fonte
2

Veja este post . <30 caracteres>

berec
fonte
2
Melhor ainda, veja a versão atualizada aqui psionides.jogger.pl/2010/12/12/… (spoiler: JSONKit vence).
Kuba Süder
2
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Bill o Lagarto
0

Se você estiver procurando por um serializador do NSObject para o JSON e vice-versa, poderá fazer o check-out do OBJC JSONSerializer

Mahadevan Sreenivasan
fonte
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

codeclash
fonte