การเปรียบเทียบ JSON Parser สำหรับ Objective-C (JSON Framework, YAJL, TouchJSON ฯลฯ )


142

เท่าที่ผมรู้ว่ามีสาม JSON Parsers สำหรับวัตถุประสงค์ C, JSON กรอบ , YAJLและสัมผัส JSON จากนั้นทั้งสามคนจะมีลักษณะของตนเอง

ตัวอย่างเช่น:
YAJL สามารถใช้เป็นตัวแยกวิเคราะห์สไตล์ SAX
JSON Framework มีประวัติค่อนข้างยาวและใช้กันอย่างแพร่หลาย
แตะ JSON แยกวิเคราะห์ NSData แทน NSString

นอกจากนี้เท่าที่ฉันทดสอบผลลัพธ์ของการเปรียบเทียบประสิทธิภาพมีดังนี้:
[รวดเร็ว] YAJL> กรอบ JSON> แตะ JSON [ช้า]

หากคุณรู้จักข้อดีและข้อเสียของตัวแยกวิเคราะห์ JSON เหล่านี้คุณบอกฉันได้ไหม
สุดท้ายถ้าคุณรู้จัก JSON Parser คนอื่น ๆ โปรดบอกฉัน


1
ลงคะแนนของฉัน! นี่เป็นคำถามที่ยอดเยี่ยม จะรักผู้เชี่ยวชาญบางคนตอบคำถามนี้ ฉันใช้ JSON Framework มาตลอด แต่ก็อยากรู้ข้อดีข้อเสียของโปรแกรมแยกวิเคราะห์อื่น ๆ
Chintan Patel

ขอบคุณชินตัน ฉันยังใช้ JSON Framework และไม่ต้องบ่น แต่ฉันหวังว่าบางคนสามารถให้คำตอบที่ดีแก่เรา
tomute

5
สิ่งที่เกี่ยวกับตัวแยกวิเคราะห์ JSON แบบสตรีมมิ่งสำหรับ Obj-C ฉันต้องการให้มีการแยกวิเคราะห์ที่จะบอกว่ามันเป็นตัวแทนเมื่อวัตถุใหม่ได้รับการแยกวิเคราะห์เช่นเมื่อคุณดาวน์โหลด JSON ขนาดใหญ่จากเซิร์ฟเวอร์คุณสามารถเริ่มการประมวลผลส่วนที่ได้รับ นอกจากนี้ยังอาจลดขนาดหน่วยความจำ
Martijn Thé

YAJL จะเป็นอย่างที่คุณต้องการ rel.me/2009/06/15/yajl-json-parser-objective-c-bindings
tomute

1
ที่ครอบคลุมการตรวจสอบ
ohho

คำตอบ:


59

หากคุณกำลังมองหาความเร็วจะดูที่JSONKit มันเร็วกว่าไลบรารี JSON ที่กล่าวถึงแล้วและมักจะมีลำดับความสำคัญเร็วกว่า และเนื่องจากมันเป็น "แคชวัตถุที่สร้างอินสแตนซ์เมื่อเร็ว ๆ นี้" ก็จะ (อีกครั้งโดยปกติ) ใช้หน่วยความจำน้อยลงเช่นกัน


2
ฉันสามารถยืนยันได้ :) ในการทดสอบของฉัน JSONKit เร็วกว่า YAJL เกือบสองเท่าและเร็วกว่า JSON Framework 50% แต่เห็นได้ชัดว่าข้อมูลที่ฉันใช้สำหรับการทดสอบเป็นสถานการณ์กรณีเลวร้ายที่สุดสำหรับ JSONKit
Kuba Suder

2
ประการที่สองนั้น อย่าลืมตั้งค่าสถานะ NS_BLOCK_ASSERTIONS ในรุ่นที่วางจำหน่ายของคุณ มันยังช่วยปรับปรุงความเร็ว
DenTheMan

1
AFAICT JSONKit ไม่สนับสนุนการแยกวิเคราะห์ตามกระแสดังนั้นหากเป็นปัญหาคุณอาจต้องการใช้ json-framework หรือ YAJL
Frank Schmitt

JSONKit เพื่อประสิทธิภาพ Referece: บทวิจารณ์ที่ครอบคลุมโดย cocoanetics.com
ohho

2
ณ ตอนนี้ดูเหมือนว่าผู้เขียน JSONKit จะถูกทอดทิ้ง มีปัญหาบางอย่างกับ XCode เวอร์ชันล่าสุดคำขอการดึงจำนวนมากเพื่อแก้ไขและไม่มีการตอบรับใด ๆ
ลุคที่คลุมเครือ

12

พิจารณาเปรียบเทียบที่ฉันทำห้องสมุดที่เร็วที่สุดคือ JSONKit ตามด้วย NSJSONSerialization (ตอนนี้เป็น API สาธารณะ) และ NextiveJSON SBJSON และ TouchJSON นั้นช้ากว่าห้องสมุด 3 เล็กน้อยก่อนหน้าเล็กน้อย

การเปรียบเทียบเสร็จสิ้นโดยใช้ iPhone 4S กับ iOS 5.0.1


1
โหวตขึ้นสำหรับการกล่าวถึงว่า NSJSONSerialization เป็นส่วนหนึ่งของ API สาธารณะ! ฉันจะยึดติดกับสิ่งนี้เพราะจะไม่มีปัญหาในการบำรุงรักษา
โยฮันเนส

เหมือนกัน สำหรับฉันNSJSONSerializationเป็นวิธีที่เหมาะสมที่จะไป - อย่างน้อยสำหรับการกำหนดเป้าหมาย iOS 5.0 ขึ้นไป
Quintin Willison

ลิงก์คำตอบเสียหาย โปรดแก้ไข
Ossir

5

นอกจากนี้ยังมีเครื่องมือแยกวิเคราะห์นี้ :

ฉันจำไม่ได้ว่าฉันสะดุดตัวนี้อย่างไร แต่มันดูเบาและเรียบง่ายดังนั้นฉันจึงคิดว่ามันเหมาะกับความต้องการของฉัน ฉันแยกเหตุการณ์เพื่อเพิ่มการกำหนดค่าเริ่มต้นจาก NSData ในขณะที่ฉันต้องการแยกการตอบสนองเล็ก ๆ ฉันไม่สนใจเกี่ยวกับการแสดง มันน่าสนใจที่จะรู้ว่ามันมีประสิทธิภาพอย่างไร


นี่คือโปรแกรมแยกวิเคราะห์ JSON ที่เบาที่สุดและง่ายที่สุดที่ฉันเคยใช้มา
เคลวิน

ว้าวทำวันของฉัน ช่างเป็นเครื่องมือแยกวิเคราะห์ที่เรียบง่ายและสง่างาม!
thandasoru

3

ฉันคิดว่า JSONKit เร็วกว่า YAJL และ YAJL นั้นเร็วกว่าคลาส JSON และ IOS5 ระดับ NSJSONSerialization เร็วกว่ามาก NSJSONSerializationไม่จำเป็นต้องใช้ API ของบุคคลที่สาม


2

ดูที่โพสต์นี้ <30 ตัวอักษร>


2
ยิ่งไปกว่านั้นดูรุ่นที่ปรับปรุงได้ที่นี่psionides.jogger.pl/2010/12/12/… (สปอยเลอร์: JSONKit ชนะ)
Kuba Suder

2
ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
Bill the Lizard


0

ทำไมไม่ลองดูการเปรียบเทียบของ akosma กับ parsers ที่เขาเปรียบเทียบ parsers ที่แตกต่างกัน หากตัวแยกวิเคราะห์หายไปคุณอาจเพิ่มไปยังการทดสอบเนื่องจากรหัสของเขาคือโอเพนซอร์ส

iPhoneWebServicesClient

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.