C [बंद] का उपयोग करके JSON को पार्स करना


82

मैं JSON को पार्स करने का एक अच्छा तरीका खोजने की कोशिश कर रहा हूं। मुझे वास्तव में एक विशाल पुस्तकालय या किसी भी चीज की आवश्यकता नहीं है, मैं नंगे न्यूनतम सुविधाओं के साथ कुछ छोटा और हल्का होगा, लेकिन अच्छा प्रलेखन।

क्या किसी के पास कुछ भी है जो वे मुझे इंगित कर सकते हैं?


5
क्या आप एक linux distro का उपयोग कर रहे हैं?
निक


उद्देश्य-सी पुस्तकालय काम करेगा? मैं अपने मैक पर TouchJson का उपयोग करता हूं, जब obj-c में इसका उपयोग करना बहुत आसान है और छोटा है।
निक

जब आप कहते हैं "नंगे न्यूनतम" आप वास्तव में कितना न्यूनतम जा सकते हैं? कुछ विभिन्न यूनिकोड एनकोडिंग संभाल लेंगे, कुछ बस UTF-8, और कुछ ही वेतन ध्यान ASCII "प्रारूप अक्षरों" जैसे {, [, ], }, ,, ", और बैकस्लैश। वे यूनिकोड से बचने के क्रम को आप पर छोड़ भी सकते हैं और नहीं भी कर सकते हैं, वे यह जाँचने के लिए आपके ऊपर छोड़ सकते हैं कि क्या संख्याएँ स्वीकार्य यूनिकोड सीमा के भीतर हैं, आदि। फिर JSON को पेड़ों में मनमाने JSON के पार्स करने के बीच मुख्य अंतर है जिसे C में जाना जाता है। structs।
हिप्पिट्रैएल

जवाबों:


74

Json के साथ शुरू करने के लिए एक बड़ी भाषा नहीं है, इसलिए इसके लिए पुस्तकालय छोटे होने की संभावना है (Xml पुस्तकालयों की तुलना में, कम से कम)।

Json.org पर सी लाइब्रेरियों की एक पूरी श्रृंखला जुड़ी हुई है । हो सकता है कि उनमें से एक आपके लिए अच्छा काम करेगा।


3
उत्तर के लिए धन्यवाद! मैं उनमें से एक झुंड के माध्यम से चला गया और वे बहुत खराब दस्तावेज / बनाए हुए थे। मैंने सोचा था कि मैं कोशिश करूँगा इससे पहले कि मैं एक को एकीकृत करने के माध्यम से सामना कर रहा हूं .... :)
डैशपर

2
@dshipper: sourceforge.net/projects/cjson आपकी आवश्यकताओं को देखते हुए कुछ आशाजनक दिख रहा है। व्यक्तिगत रूप से इन पुस्तकालयों में से किसी का भी उपयोग नहीं किया गया है, इसलिए मैं एक की सिफारिश नहीं कर सकता। किसी भी लाइब्रेरी के लिए सुझाव केवल एक राय हो, किसी भी तरह, और निश्चित जवाब नहीं :)
मेरलिन मॉर्गन-ग्राहम

5
@dshipper: मुझे jansson के साथ अच्छे अनुभव हैं, जो हल्के और अच्छी तरह से प्रलेखित है। digip.org/jansson/doc/2.1
डायट्रिच

1
@ डिएट्रिच, डशीपर: मैंने अभी जॅन्सन को देखा। मैं मानता हूं कि यह अच्छी तरह से प्रलेखित है और काफी छोटा है, और ऐसा लगता है कि इसमें एक अच्छा परीक्षण सूट है। यह शायद आपकी आवश्यकताओं को भी पूरा करेगा। लेकिन वहाँ शायद कई पुस्तकालय हैं जो काम करेंगे। मैं आपको अपने Json निर्भरता को सबसे अच्छा करने की सलाह दूंगा, आप कुछ पुस्तकालयों को आज़मा सकते हैं, और देख सकते हैं जो आपको सबसे कम दुःख देता है :)
मेरलिन मॉर्गन-ग्राहम

तो, @dshipper, क्या आप sourceforge.net/projects/cjson या क्या के लिए गए थे?
मावग का कहना है कि मोनिका

37

cJSON में एक सभ्य API है और यह छोटी (2 फाइलें, ~ 700 लाइनें) है। दूसरे जिनसन पार्सरों को मैंने पहले देखा था उनमें से कई विशाल थे ... मैं सिर्फ कुछ JSON को पार्स करना चाहता हूं।

संपादित करें: हमने पिछले कुछ वर्षों में cJSON में कुछ सुधार किए हैं ।


10

Jsmn काफी न्यूनतर है और इसके साथ काम करने के लिए केवल दो कार्य हैं।

http://zserge.bitbucket.org/jsmn.html


Jsmn के साथ एक दोष यह है कि यह यूनिकोड से बचने के क्रम को नहीं संभालता है। इसके स्रोत में आप देखेंगे: /* Allows escaped symbol \uXXXX */... case 'u':.../* TODO */
hippietrail

14
इसके अलावा यह सब आपको टोकन देता है, गुड लक डेटा का कोई मतलब नहीं है। यह पूरी तरह से सबसे छोटी, कुशल चीज की तरह दिखती है जो आप कर सकते हैं, लेकिन यह बहुत कुछ नहीं करती है।
नैट्स

जाहिर है कि उन्होंने यूनिकोड प्रतीकों के लिए अपने "TODO" को निर्धारित किया है।
एविग्नेस्टो

9

NXJSON फुल-फीचर्ड है फिर भी बहुत छोटा है (~ कोड की 400 लाइनें) JSON parser, जिसमें API का उपयोग करना आसान है:


जैसा कि आप NXJSON के डेवलपर लगते हैं, शायद आप इस पर टिप्पणी कर सकते हैं कि यह cJSON या अन्य विकल्पों के साथ कैसे तुलना करता है?
मैट

5
सरल तरीके से की गई साधारण चीजें - यह अधिकांश अन्य पार्सर्स से NXJSON का मुख्य अंतर है। cJSON भी सरल है, लेकिन json parser से परे इसमें json constructor के साथ-साथ serializer भी शामिल है। CJSON को अधिक मेमोरी की आवश्यकता है क्योंकि यह सभी स्ट्रिंग्स को डुप्लिकेट करता है, जबकि NXJSON मूल सामग्री को नष्ट करने के स्थान पर सभी जोड़तोड़ करता है। आपके कार्य के आधार पर इन अंतरों को फायदे या नुकसान के रूप में माना जा सकता है। NXJSON भी टिप्पणियों को संभालता है, जो कॉन्फ़िगर फ़ाइलों को पार्स करने के लिए अच्छा है।
यारोस्लाव स्टवानिचि

9

आप जानसन पर एक नजर डाल सकते हैं

वेबसाइट निम्नलिखित बताती है: JSON डेटा को एन्कोडिंग, डिकोडिंग और हेरफेर करने के लिए Jansson एक C लाइब्रेरी है। इसकी विशेषताएं:

  • सरल और सहज ज्ञान युक्त एपीआई और डेटा मॉडल
  • क्या JSON से दोनों को एनकोड और डीकोड किया जा सकता है
  • व्यापक प्रलेखन
  • अन्य पुस्तकालयों पर कोई निर्भरता नहीं
  • पूर्ण यूनिकोड समर्थन (UTF-8)
  • व्यापक परीक्षण सूट

1
डायरेक्ट
जीथब

मुझे jsmnइसकी गति [1] के कारण उपयोग करने के लिए लुभाया गया था , लेकिन यह एन्कोडिंग का समर्थन नहीं करता है। इसके अलावा Jansson उपयोग करने के लिए वास्तव में आसान है। --- [1] Translate.google.it/…
मार्को सुल्ला

OjC तेज है और एन्कोडिंग का समर्थन करता है। github.com/ohler55/ojc
पीटर ओहलर


8

मैंने एक कार्य परियोजना के लिए JSON-C का उपयोग किया और इसकी सिफारिश करूंगा। लाइटवेट और खुले लाइसेंस के साथ जारी किया जाता है।

वितरण में प्रलेखन शामिल है। आपके पास मूल रूप से *_addJSON ऑब्जेक्ट्स बनाने के लिए फ़ंक्शंस हैं, *_putउनकी मेमोरी रिलीज़ करने के लिए समान फ़ंक्शंस, और स्ट्रिंग फ़ंक्शन में टाइप और आउटपुट ऑब्जेक्ट्स में कनवर्ट करने वाले यूटिलिटी फ़ंक्शंस।

लाइसेंसिंग आपकी परियोजना के साथ शामिल करने की अनुमति देता है। हमने इसे JSON-C को एक स्थिर पुस्तकालय के रूप में संकलित करते हुए उपयोग किया, जो मुख्य बिल्ड के साथ जुड़ा हुआ है। इस तरह, हमें निर्भरता (Xcode स्थापित करने के अलावा) के बारे में चिंता करने की ज़रूरत नहीं है।

JSON-C भी बिना किसी घटना के OS X (x86 Intel) और Linux (x86 Intel) के तहत हमारे लिए बनाया गया है। यदि आपके प्रोजेक्ट को पोर्टेबल बनाने की आवश्यकता है, तो यह एक अच्छी शुरुआत है।


6

क्या आपको मनमाने ढंग से JSON संरचनाओं को पार्स करने की आवश्यकता है, या केवल डेटा जो आपके आवेदन के लिए विशिष्ट है। यदि उत्तरार्द्ध, आप मानों के लिए JSON कुंजियों को मैप करते हुए कोई हैश तालिका / मैप संरचना उत्पन्न न करके इसे बहुत हल्का और अधिक कुशल बना सकते हैं; इसके बजाय आप डेटा को सीधे संरचनात्मक क्षेत्रों में या जो भी हो स्टोर कर सकते हैं।


2
सी। जैसे गैर-गतिशील भाषाओं के साथ JSON का उपयोग करते समय यह एक बहुत ही महत्वपूर्ण बिंदु है, लेकिन यह एक जवाब नहीं है, इसलिए वास्तव में ओपी के प्रश्न के लिए एक टिप्पणी होनी चाहिए।
हिप्पिट्रैमिल

रचनात्मक सोच के लिए +1! हालांकि यह कैसे काम करेगा? यह अभी भी एक विशेष रूप से हल्के वजन पुस्तकालय का उपयोग नहीं कर सकता है? संरचना क्षेत्रों में पार्स करना अभी भी काम का एक उचित सा लगता है।
CL22
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.