2012-05-20 8 views
13

में पार्स JSON मैं जेएसओएन-एन्कोडेड डेटा को सी structs में पढ़ना चाहता हूं। जेसन डेटा की संरचना अग्रिम, अपेक्षाकृत सपाट और कुछ सी स्ट्रक्चर टाइपिफ द्वारा नकल की जाती है। तीसरे स्तर पर या तो एक सरणी में JSON ऑब्जेक्ट्स की एक बहुत लंबी सूची होती है जिसे एक समय में संसाधित करना होता है।एएनएसआई सी

कोड एक बहुत ही सीमित प्रणाली पर चलाने का इरादा है, इसलिए लाइब्रेरी को गतिशील रूप से स्मृति आवंटित नहीं करना चाहिए।

मुझे पता है कि Crockford's List of JSON libraries है, लेकिन मुझे पूरा यकीन नहीं है कि कौन सी समस्या बताई गई समस्या के लिए सबसे अच्छी फिट है।

+0

में उपयोग कर सकते हैं धन्यवाद @alexis। जो मैं वास्तव में पूछ रहा था वह एक सिफारिश नहीं है, लेकिन एक _comparison_ है। – artistoex

+0

मैंने इसका उपयोग किया है http://www.digip.org/jansson/ लेकिन दूसरों को नहीं, इसलिए कोई तुलना संभव नहीं – ShinTakezou

+0

@artistoex वास्तव में यह बदतर है, क्योंकि तब यह तर्कसंगत हो जाता है। किसी भी तरह से ... मैं वास्तव में मेटा पर उस लड़के की राय साझा नहीं करता हूं, लेकिन संभवतः आप Google का उपयोग करके इस प्रश्न का उत्तर देने से बेहतर हो सकते हैं। – Potatoswatter

उत्तर

3

json-c के साथ प्रयास करें सबसे आम है और यह ओपन सोर्स और विंडोज (Win32) पर भी काम करता है।

JSON-सी एक संदर्भ गिनती ऑब्जेक्ट मॉडल है कि आसानी से सी में JSON ऑब्जेक्ट के निर्माण करने की अनुमति देता है, उन्हें उत्पादन JSON तार प्रारूपित और वापस पार्स JSON स्वरूपित स्ट्रिंग JSON वस्तुओं की सी प्रतिनिधित्व में के रूप में लागू करता है।

16

jsmn lib का प्रयास करें, मुझे प्यार है कि यह किसी भी जेसन फ़ाइल को केवल दो मॉलोक के साथ पार्स कर सकता है।

जेएसएमएन जेएसओएन डेटा प्रारूप को पार्स करने के लिए एक न्यूनतम पुस्तकालय है। इसे आसानी से छोटी परियोजनाओं में उपयोग किया जा सकता है या एम्बेडेड सिस्टम में एकीकृत किया जा सकता है।

jsmn एक अच्छा विकल्प, परिणाम में है:
- यह C98
के साथ संगत है - यह कोई गतिशील स्मृति आवंटन
का उपयोग करता है - यह छोटी संभव भूमि के ऊपर है
- यह JSON डेटा पार्स करने के लिए केवल एक पास की जरूरत है
- यह कोई निर्भरता भी libc
है - यह MIT लाइसेंस के तहत वितरित किया जाता है, तो आप उनका कहना है कि बाहर के लिए अपने मालिकाना परियोजनाओं

+2

जेएसएमएन को मैलॉक्स की भी आवश्यकता नहीं है क्योंकि आप सरणी घोषित कर सकते हैं, लेकिन दोष यह है कि यदि आप कुछ बड़े पैमाने पर पार्स करना चाहते हैं या आकार को पहले से नहीं जानते हैं तो आप आवंटित कर सकते हैं या जब आप जाते हैं तो अधिक मेमोरी को पुन: आवंटित करें। – hippietrail

+0

@hippietrail यह दोष 'सी' का उपयोग करने का नतीजा है, न कि 'jsmn'। – YoYoYonnY

+0

@YoYoYonnY: वास्तव में। ऐसा लगता है कि मैं सिर्फ जिम के शुरुआती दावे के लिए एक चेतावनी प्रदान कर रहा था। – hippietrail

संबंधित मुद्दे