2011-10-28 8 views
31

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

+0

अब तक महान प्रतिक्रियाएं। लेकिन मैं वास्तव में प्रदर्शन के बारे में और अधिक सुनना चाहता हूँ। –

+0

यदि आप प्रदर्शन सोच रहे हैं, तो आपको शायद स्मृति उपयोग भी करना चाहिए। संस्करण जो मैं एंड्रॉइड जेएसओएन का उपयोग कर रहा हूं वह पाठक/इनपुटस्ट्रीम से टोकनिंग का समर्थन नहीं करता है और डेटा मॉडल में मैपिंग करने के लिए इसलिए 2x मेमोरी की आवश्यकता होगी। – ThomasRS

+0

मेरे "बहुत, तेज़" लिंक में क्रमबद्धता समय, deserialization समय, और आकार के साथ एक बहुत व्यापक प्रदर्शन तुलना है। क्या आप इससे परे कुछ भी ढूंढ रहे हैं? – kabuko

उत्तर

39

जबकि जावा-टू/से-जेएसओएन एपीआई का एक मुट्ठी भर है जो जेएसओएन और मनमाने ढंग से जावा डेटा संरचना के बीच आसान (मूल) बाध्यकारी प्रदान करता है, जैक्सन और जीसन अब तक का सबसे परिष्कृत (सक्षम) और फीचर- समृद्ध विकल्प

जुलाई (2011) में, मैंने जैसन बनाम जैक्सन का उपयोग करके तुलना में मेरे ब्लॉग पर एक बहु-भाग श्रृंखला पोस्ट की, जो कि जीसन उपयोगकर्ता मार्गदर्शिका में आयोजित किए गए थे, जैसे जैक्सन में तुलनात्मक कार्यान्वयन के उदाहरणों सहित, जीसन में कार्यान्वयन, जहां जीसन उपयोगकर्ता मार्गदर्शिका अधूरा या टूटा हुआ था)।

श्रृंखला का छठा हिस्सा तुलना के लिए आसान नेविगेशन लिंक प्रदान करता है, साथ ही सारांश तुलना सूची भी प्रदान करता है। http://programmerbruce.blogspot.com/2011/07/gson-v-jackson-part-6.html

यह सामान्य JSON-to/from-Java कार्यों के लिए जीसन बनाम जैक्सन का उपयोग करने की सबसे व्यापक तुलना है।

जैसा कि बताया गया है, विभिन्न जावा-टू/से-JSON एपीआई की प्रदर्शन तुलना https://github.com/eishay/jvm-serializers/wiki पर उपलब्ध है। जीसन (2.0) की वर्तमान रिलीज जैक्सन (1.9.2) की वर्तमान रिलीज के मुकाबले लगभग 16 गुना धीमी है जो 500 बाइट जेएसओएन संरचना को क्रमबद्ध करने और deserializing पर बहुत तुलनीय कार्यान्वयन प्रयासों (कोड की केवल एक या दो पंक्तियों) का उपयोग कर धीमी है। ।

मार्टिन Adamek, http://martinadamek.com/2011/01/31/comparison-of-json-parsers-performance-on-android/ और http://martinadamek.com/2011/02/04/json-parsers-performance-on-android-with-warmup-and-multiple-iterations/

+2

पुस्तकालय के आकार में कारक मत भूलना। जीसन लगभग 200 किलोग्राम होगा, जबकि जैक्सन की 3 निर्भरताएं लगभग 1 एमबी दौड़ेंगी। बशर्ते आपको चमकदार प्रदर्शन की आवश्यकता न हो, मैं सादगी और लाइब्रेरी आकार के लिए जीसन की सलाह देता हूं। – CorayThan

1

एंड्रॉइड JSON बहुत कार्यात्मक है, लेकिन एक सीटी घंटियाँ नहीं है। जहां जीएसओएन आपको अपनी कक्षाओं और उनके जेसन प्रतिनिधित्व के बीच मैपिंग निर्दिष्ट करने की अनुमति देता है। यह आपके हिस्से पर कोई अतिरिक्त काम नहीं होने के साथ, जेसन को किसी भी आदिम मूल्यों का बहुत अच्छा स्वचालित रूपांतरण भी है।

जीएसओएन के साथ भुगतान यदि आपके पास बहुत सी जेएसओएन संप्रेषण है, या जटिल वस्तुओं के लिए अवैध मूल्यों (जैसे नाएन) को रोकने के लिए मूल्य जांच की आवश्यकता होती है और अन्य मामलों जहां जावा-टू-जेएसओएन सीधे आगे से कम है।

लेकिन यदि आपको बस एक साधारण जेसन ऑब्जेक्ट भेजने और प्राप्त करने की आवश्यकता है, तो मूल पुस्तकालय चाल को काफी सम्मानपूर्वक करता है। मैं अपने मौजूदा प्रोजेक्ट में सर्वर पर उच्च स्कोर पोस्ट करने के लिए इसका उपयोग कर रहा हूं।

3

खैर कभी कभी प्रदर्शन और प्रयोज्य अंतर पर हो सकता है, लेकिन मैं मिल गया है GSON तरह Jackson विकल्पों से उपयोग करने के लिए आसान हो सकता है, org.json और अन्य। मैं वर्तमान में JSON डेटा को क्रमबद्ध कर रहा हूं जिसमें ऑब्जेक्ट्स हैं और 3 या 4 स्तरों को गहराई से सूचीबद्ध करता है। ऐसा कहा जा रहा है कि, मैंने अपने JSON को क्रमबद्ध करने के लिए अधिक उपयुक्त बनाने के लिए तैयार किया है, लेकिन कुल जीएसओएन बहुत अच्छा रहा है।

1

मैं जीएसओएन का परीक्षण कर रहा हूं और कुछ अन्य लोगों की कोशिश की है।

जीएसओएन सीरियलाइजिंग (वस्तु को जेसन में कनवर्ट करना) जटिल वस्तुओं के साथ मूल रूप से कोई बदलाव या विचार नहीं है, लेकिन थोड़ा धीमा और स्मृति गहन है।

जीएसओएन Roadmap वेबसाइट इंगित करती है कि वे कुछ प्रदर्शन मुद्दों को हल करने के लिए संस्करण 2.0 की अपेक्षा करते हैं और यह अक्टूबर 2011 में समाप्त हो जाएगा (जल्द ही समाप्त हो जाएगा)। तो मुझे उम्मीद है कि वे इसे वितरित करेंगे क्योंकि मुझे वास्तव में इसकी आवश्यकता है।

अन्य पुस्तकालय (क्षमा करें अभी नाम याद नहीं कर सकते हैं) जैसा कि क्रमबद्ध नहीं लगता है। कुछ केवल आपकी कक्षाओं में सार्वजनिक चर देख सकते हैं या केवल गेटर्स/सेटर्स की तरह सार्वजनिक विधियों पर कॉल कर सकते हैं। जीसन इस तरह से ऐसा नहीं करता है, और सबकुछ पकड़ लेगा।

मैंने अभी तक deserializing पक्ष (JSON वापस जावा ऑब्जेक्ट्स में परिवर्तित) पर बहुत कुछ नहीं किया है।

+0

मैं जीएसओ पुस्तकालयों के लिए तुलना-खरीदारी कर रहा हूं, और यह सुनना अच्छा लगेगा कि जीसन 2.0+ ने प्रदर्शन में काफी सुधार किया है या नहीं। – JimN

+0

@JimN: हाँ जीसन 2.0 बेहतर काम करता प्रतीत होता है। असल में 2.0 से भी एक नया संस्करण है, मुझे लगता है कि मैंने कोशिश नहीं की है। मैं इसे बहुत प्रभावी ढंग से उपयोग कर रहा हूँ। इसके लिए बाहर निकलने की एक बात: मेरे ऐप और परीक्षण को निर्यात करने के बाद मैं प्रोगुआर्ड और जीएसओएन के कारण समस्याओं में भाग गया। – Fraggle

8

जीएसओएन वास्तव में उपयोग करने में आसान है और यदि प्रदर्शन कोई मुद्दा नहीं है, तो यह काफी अच्छा है। Jacksonmuch, much faster है और वास्तव में उपयोग करने के लिए और अधिक प्रयास नहीं है। जैसा कि मैंने the past में किसी अन्य संबंधित SO प्रश्न में कहा है, मुझे जीएसओएन से जैक्सन में स्विच करके भारी प्रदर्शन लाभ (जेएसओएन के बड़े सेट के साथ काम करते समय) प्राप्त हुआ है।

3

यह जवाब एक स्मृति के नजरिए से देखा जाता है पर Android पर चल विभिन्न एपीआई के कुछ प्रदर्शन के परिणामों पोस्ट के रूप में वह भी प्रदर्शन :-P माना जा सकता है।

मैंने एंड्रॉइड में 70 केबी जेएसओएन फ़ाइल की पार्सिंग लागू की है, जो ऑब्जेक्ट्स की एक सरणी को पार्स कर रही है जिसे या तो पहले से मौजूद डेटा बाध्यकारी ऑब्जेक्ट्स को स्क्रैच से लोड करना चाहिए या सभी HTTP पर अपडेट करना चाहिए।

एंड्रॉयड क्रम 3 के लिए built-in org.json package साथ सबसे बड़ी खामी

  1. JSONTokener निर्माता केवल एक स्ट्रिंग, कोई रीडर
  2. के लिए व्यावहारिक समर्थन की कमी को स्वीकार करता था पुल पार्सिंग

यह आम तौर पर इसका मतलब है कि आपको पूरी फ़ाइल को स्मृति में रखना होगा (2x बाइट आकार सोचें) और साथ ही साथ अपने डेटा बाध्यकारी बनाना शुरू करने से पहले सभी परिणामी JSON ऑब्जेक्ट्स को स्मृति में रखें। तो सबसे खराब मामला 2x फ़ाइल आकार, जेएसओएन ऑब्जेक्ट्स और डेटा बाइंडिंग ऑब्जेक्ट्स है - आम तौर पर कम से कम 2x स्मृति आवश्यकता।

यदि आप एक पाठक से खींचते हैं, तो आप इसे 1x तक प्राप्त कर सकते हैं। स्मृति परिप्रेक्ष्य से आप यह सबसे महत्वपूर्ण बात कर सकते हैं।

और, आश्चर्य आश्चर्य है, अगर आप जैक्सन की तरह कुछ और अधिक आधुनिक कक्षाएं, या सिर्फ org.json से नवीनतम स्रोतों के साथ जाना है, आप एक समस्या के बिना इन दोनों की कमी से बचने के लिए सक्षम हो जाएगा, एक बाद एंड्रॉयड क्रम भी लगता है जेएसओएन पुल-पार्सिंग के लिए कुछ उपयोगिता कक्षाएं हैं।

यदि आप पुराने रनटाइम से फंस गए हैं, और एप्लिकेशन के पदचिह्न को नीचे रखना चाहते हैं, जैसा कि मैंने किया है, तो आप JSONokener को org.json से कॉपी कर सकते हैं और अपने शीर्ष स्तर पार्स लूप को संशोधित कर सकते हैं (मेरे मामले में सरणी पार्स लूप) और एक ही समय में पूरे सरणी के बजाय सरणी के प्रत्येक सदस्य पर डेटा बाध्यकारी करें। इस तरह आप पहले से ही एंड्रॉइड रनटाइम में JSON ऑब्जेक्ट्स का पुन: उपयोग करते हैं और अभी भी स्ट्रीमिंग प्रभाव प्राप्त करते हैं (प्रत्येक शीर्ष-स्तरीय ऑब्जेक्ट में आईडी जोड़ने की कीमत पर)।

+0

मुझे यह प्रतिक्रिया पसंद है क्योंकि यह बताती है कि क्यों टोकनिंग दृष्टिकोण की तरह कुछ तेज है। –

+0

हाँ यदि महत्वपूर्ण विलंब को उस समय के रूप में मापा जाता है जब प्रतिक्रिया प्रक्रिया में नेटवर्क किए गए अनुरोधों को पूरा किया जाता है, स्ट्रीमिंग प्रोसेसिंग एक्सएमएल और जेएसओएन और निश्चित रूप से अन्य प्रारूपों के लिए भी आदर्श है। – ThomasRS

1

कोशिश android-async-http

  • अतुल्यकालिक HTTP अनुरोध बनाने, अनाम कॉलबैक
  • HTTP अनुरोध यूआई धागा
  • अनुरोध एक ThreadPool का उपयोग समवर्ती संसाधन उपयोग सीमित रखने के लिए
  • प्राप्त/पोस्ट के बाहर होने में प्रतिक्रियाओं को संभालने पैराम्स बिल्डर (RequestParams)
  • कोई अतिरिक्त तृतीय पक्ष पुस्तकालयों के साथ फ़ाइल अपलोड मल्टीपार्ट
  • अपने आवेदन करने के लिए छोटे आकार भूमि के ऊपर, केवल सब कुछ के लिए 25kb
  • स्वत: स्मार्ट अनुरोध पुनर्प्रयास धब्बेदार मोबाइल कनेक्शन
  • सुपर फास्ट अनुरोधों के लिए
  • स्वत: gzip प्रतिक्रिया डिकोडिंग समर्थन
  • बाइनरी फ़ाइल (छवियों आदि) BinaryHttpResponseHandler साथ डाउनलोड करने के लिए अनुकूलित
  • निर्मित
  • लगातार कुकी स्टोर JsonHttpResponseHandler साथ JSON में पार्स करने प्रतिक्रिया, अपने ऐप के SharedPreferences में कुकीज़ बचाता

और आप fastjson भी कोशिश कर सकते हैं जो एक तेज जेसन प्रोसेसर है।

+0

हाय, कृपया http://stackoverflow.com/questions/how-to-answer विशेष रूप से "** लिंक के लिए संदर्भ प्रदान करें **" भाग पढ़ें। –

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