Objective-C için JSON Parser karşılaştırması (JSON Framework, YAJL, TouchJSON, vb.)


142

Bildiğim kadarıyla Objective-C, JSON Framework , YAJL ve Touch JSON için üç JSON Ayrıştırıcı var . Sonra, bu üçünün kendine has özellikleri olacaktır.

Örneğin:
YAJL, SAX tarzı ayrıştırıcı olarak kullanılabilir.
JSON Framework nispeten uzun bir geçmişe sahiptir ve yaygın olarak kullanılmaktadır.
JSON'a dokunun, NSString yerine NSData öğesini ayrıştırır.

Buna ek olarak, test ettiğim kadarıyla, performans karşılaştırmasının sonucu şöyledir:
[hızlı] YAJL> JSON Framework> Touch JSON [yavaş].

Bu JSON ayrıştırıcılarının artılarını ve eksilerini biliyorsanız, bana söyleyebilir misiniz?
Son olarak, başka bir JSON Parser biliyorsanız, lütfen bana söyleyin.


1
Oyum bitti! Bu harika bir soru. Bazı uzmanlar buna cevap isterdim. Başından beri JSON Framework kullanıyorum ama siz, diğer ayrıştırıcıların artılarını ve eksilerini bilmek istiyoruz.
Chintan Patel

Teşekkürler Chintan. Ben de JSON Framework kullanıyorum ve hiçbir şikayet var. Ama umarım birisi bize iyi bir cevap verebilir.
tomute

5
Obj-C için akışlı bir JSON ayrıştırıcı ne olacak? Yeni bir nesne ayrıştırıldığında temsilci olduğunu söyleyen bir ayrıştırıcıya sahip olmak istiyorum, örneğin bir sunucudan büyük bir JSON indirirken, alınan parçayı işlemeye başlayabilirsiniz. Ayrıca bellek kapladığı alanı da düşürebilir.
Martijn Thé

YAJL tam olarak istediğiniz gibi olurdu. rel.me/2009/06/15/yajl-json-parser-objective-c-bindings
Şubat'ta

1
Kapsamlı bir inceleme .
ohho

Yanıtlar:


59

Hız arıyorsanız JSONKit'e bir göz atın . Daha önce bahsedilen JSON kitaplıklarından (genellikle) çok daha hızlıdır, genellikle daha hızlıdır. Ve "yakın zamanda başlatılan nesne önbelleği" nedeniyle, (yine genellikle) daha az bellek kullanır.


2
Bunu onaylayabilirim :) Testlerimde JSONKit, YAJL'den neredeyse iki kat daha hızlı ve JSON Framework'ten% 50 daha hızlıydı, ancak görünüşe göre test için kullandığım veriler JSONKit için en kötü durum senaryosuydu.
Kuba Suder

2
İkincisi. Release sürümlerinizde NS_BLOCK_ASSERTIONS bayrağını ayarlamayı unutmayın. Hızı daha da geliştirir.
DenTheMan

1
AFAICT JSONKit akış tabanlı ayrıştırmayı desteklemediğinden, bu bir sorunsa json-framework veya YAJL ile gitmek isteyebilirsiniz.
Frank Schmitt

Performans için JSONKit. Tavsiye: cocoanetics.com tarafından kapsamlı bir inceleme .
ohho

2
Şu an itibariyle, JSONKit yazar tarafından terk edilmiş gibi görünüyor. XCode'un en son sürümüyle ilgili bazı sorunlar, düzeltmek için çok sayıda çekme isteği var ve bunların hiçbiri kabul edilmedi.
Luke The Obscure

12

Yaptığım bir karşılaştırma göz önüne alındığında , en hızlı kütüphane JSONKit, ardından NSJSONSerialization (şimdi ortak API) ve NextiveJSON. SBJSON ve TouchJSON önceki 3 kütüphaneden biraz daha yavaştır.

Karşılaştırma, iOS 5.0.1 yüklü bir iPhone 4S kullanılarak yapılmıştır.


1
NSJSONSerialization uygulamasının genel API'nın bir parçası olduğunu belirttiğiniz için oy verin! Buna bağlı kalacağım, çünkü bakım ile ilgili herhangi bir sorun olmayacak.
Johannes

Aynen. NSJSONSerialization , benim için, en azından iOS 5.0 ve üstünü hedeflemek için mantıklı bir yol.
Quintin Willison

Yanıttaki bağlantı bozuk. Lütfen düzeltin
Ossir

5

Ayrıca bu ayrıştırıcı var :

Bunu nasıl tökezlediğimi hatırlamıyorum, ancak hafif ve basit görünüyordu, bu yüzden ihtiyaçlarıma uygun olduğunu düşündüm. NSData'dan başlatma eklemek için olayı çatalladım. Küçük yanıtları ayrıştırmam gerektiğinden, performansı umursamadım. Yine de nasıl performans gösterdiğini bilmek ilginç olurdu.


Bu, şimdiye kadar kullandığım en hafif ve basit JSON ayrıştırıcısıdır, şiddetle tavsiye edilir.
Kelvin

Vay canına, benim günümü yaptı. Böyle basit ve zarif bir ayrıştırıcı!
thandasoru

3

JSONKit'in YAJL'den daha hızlı ve YAJL'nin Touch JSON ve IOS5 sınıfından daha hızlı olduğunu düşünüyorum NSJSONSerialization sınıfı çok daha hızlı. NSJSONSerialization herhangi bir üçüncü taraf API kullanmaya gerek yoktur.




0

Neden farklı ayrıştırıcı türlerini karşılaştırdığı, ayrıştırıcılardaki akosma kriterlerine bir göz atmıyorsunuz? Bir ayrıştırıcı eksikse, kodu açık kaynak olduğu için testlere de ekleyebilirsiniz.

iPhoneWebServicesClient

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.