यह जवाब मानता है कि आप वास्तव में एक पार्सर लिखना चाहते हैं और आवश्यक प्रयास करने के लिए तैयार हैं।
आपको JSON के औपचारिक विनिर्देश के साथ प्रारंभ करना होगा। मुझे http://www.ietf.org/rfc/rfc4627.txt मिला है। यह भाषा को ठीक से परिभाषित करता है। आपको spec में सबकुछ लागू करना होगा और इसके लिए परीक्षण लिखना होगा। आपके पार्सर को गलत JSON (जैसे आपकी) के लिए पूरा करना होगा और अपवादों को फेंक देना होगा।
यदि आप एक पार्सर लिखना चाहते हैं, रोकें, सोचें और फिर नहीं करें। यह सही ढंग से काम करने के लिए बहुत काम है। आप जो कुछ भी करते हैं, उसका उचित काम करें - अपूर्ण पार्सर्स एक खतरे हैं और उन्हें कभी वितरित नहीं किया जाना चाहिए।
आपको कोड लिखना चाहिए जो अनुरूप है। यहां spec से कुछ वाक्यांश दिए गए हैं। आप उन्हें समझ में नहीं आता अगर आप ध्यान से अनुसंधान और यह समझने का करना होगा: "। JSON टेक्स्ट यूनिकोड में एन्कोड किया जाएगा डिफ़ॉल्ट एन्कोडिंग UTF-8 है।"
"एक JSON पार्सर को सभी ग्रंथों को स्वीकार करना होगा जो JSON व्याकरण के अनुरूप हैं।"
" एन्कोडिंग विचार: 8 बिट अगर यूटीएफ -8; द्विआधारी यदि UTF-16 या UTF-32
JSON may be represented using UTF-8, UTF-16, or UTF-32. When JSON
is written in UTF-8, JSON is 8bit compatible. When JSON is
written in UTF-16 or UTF-32, the binary content-transfer-encoding
must be used.
"
" किसी भी चरित्र से बच गया हो सकता है। चरित्र बेसिक
बहुभाषी विमान (U + 0000 U + FFFF के माध्यम से) में है, तो यह
एक छह चरित्र अनुक्रम के रूप में प्रतिनिधित्व किया जा सकता है: एक रिवर्स सोलिडस छोटा अक्षर यू, जिसके बाद से पीछा
चार हेक्साडेसिमल अंक
चरित्र के कोड बिंदु को एन्कोड करें। हेक्साडेसिमल अक्षरों ए
एफ ऊपरी या लोअरकेस हो सकता है। इसलिए, उदाहरण के लिए,
युक्त एक स्ट्रिंग केवल एक एकल रिवर्स ठोस वर्ण को
"\ u005C" के रूप में दर्शाया जा सकता है। "
आप इन को समझते हुए भी तो कुछ अन्य पारसर्स समीक्षा करते हैं और देखते हैं कि उनमें से कोई अनुरूपता परीक्षण किया है। अपने खुद के आवेदन के लिए इन उधार।
आप अभी भी कर रहे हैं एक पार्सर लिखने के लिए, चाहते हैं उत्सुकता से आपको एक पार्सर जनरेटर का उपयोग करने पर दृढ़ता से विचार करना चाहिए। उदाहरण हैं जैवैक, सीयूपी और मेरा पसंदीदा टूल, एएनटीएलआर। एएनटीएलआर बहुत शक्तिशाली है लेकिन शुरुआत करना मुश्किल हो सकता है। पार्बोल्ड के सुझाव को भी देखें, जिसे मैं अब अनुशंसा करता हूं। जेएसओएन अपेक्षाकृत है सरल और यह एक उपयोगी अभ्यास होगा। अधिकांश पार्सर जेनरेटर एक पूर्ण पार्सर उत्पन्न करते हैं जो निष्पादन योग्य कोड बना सकता है या आपके JSON का पार्स पेड़ उत्पन्न कर सकता है।
यदि आप इसे देखने की अनुमति देते हैं तो http://www.antlr.org/wiki/display/ANTLR3/JSON+Interpreter पर एएनटीएलआर का उपयोग कर एक JSON पार्सर जनरेटर है। मैंने अभी भी Parboiled parser-generator for JSON खोजा है। यदि एक पार्सर लिखने का आपका मुख्य कारण यह सीखना है कि यह कैसे करना है, तो यह शायद एक अच्छा प्रारंभिक बिंदु है।
यदि आपको अनुमति नहीं है (या नहीं चाहते हैं) एक पार्सर जनरेटर का उपयोग करें तो आपको अपना खुद का पार्सर बनाना होगा। यह आम तौर पर दो भागों में आता है:
एक लेक्सर/टोककेज़र। यह भाषा विशिष्टता में परिभाषित बुनियादी प्राइमेटिव को पहचानता है। इस मामले में इसे घुंघराले-ब्रैकेट, उद्धरण इत्यादि को पहचानना होगा। यह शायद संख्याओं का प्रतिनिधित्व भी करेगा।
एक AbstractSyntaxTree (http://en.wikipedia.org/wiki/Abstract_syntax_tree, एएसटी) जनरेटर। यहां आप अपने जेएसओएन के अमूर्तता का प्रतिनिधित्व करने वाले पेड़ को इकट्ठा करने के लिए कोड लिखते हैं (उदाहरण के लिए व्हाइटस्पेस और कर्ली को त्याग दिया गया है)।
जब आपके पास एएसटी है तो इसे नोड्स पर फिर से चालू करना और वांछित आउटपुट बनाना आसान होना चाहिए।
लेकिन जेएसओएन जैसी साधारण भाषा के लिए पार्सर जेनरेटर लिखना बहुत काम है।
आप [Gson] (https://code.google.com/p/google-gson/) का उपयोग क्यों नहीं करते? –
यह मान्य JSON नहीं है! – fge
[आपने क्या प्रयास किया है] (http://mattgemmell.com/2008/12/08/what-have-you-tried/) अब तक हमें पूछने के अलावा? –