2015-03-13 7 views
18

यह मेरी पहली पोस्ट है। एक उभरते एंड्रॉइड डेवलपर के रूप में, मैंने विभिन्न विषयों पर लगभग दैनिक आधार पर एसओ पोस्ट पढ़े, लेकिन इस सवाल के लिए, मुझे Google या SO से कोई सहायता नहीं मिली।किस का उपयोग करना है? Javax.json से org.json VS JsonObject से JSONObject

मेरा शोध अब तक:
इस प्रश्न की खोज सामान्य से कठिन थी क्योंकि खोज इंजन इस समस्या में महत्वपूर्ण है, जो केस-संवेदनशीलता की परवाह नहीं करते हैं। Google को खोजना ही मुझे कक्षाओं, पुराने लेख, या पूरी तरह से अप्रासंगिक लेखों के लिए लिंक देता है। मुझे सबसे नज़दीक जेएसओएनएरे बनाम JSONObject था, और यह एक बिल्कुल अलग सवाल है। एसओ खोज ने एक ही परिणाम दिया। जहां तक ​​मैं कह सकता हूं, SO पर सभी प्रासंगिक पोस्ट JSONObject का संदर्भ लें और JsonObject नहीं।

न तो ओरेकल और न ही json.org दस्तावेज ने दूसरी ओर उल्लेख किया, न ही एंड्रॉइड डेवलपर JSONObject पेज जो org.json लाइब्रेरी का उपयोग करता है।

http://docs.oracle.com/javaee/7/api/javax/json/JsonObject.html
http://www.json.org/javadoc/org/json/JSONObject.html
मैं होता भी JSONObject के लिए एंड्रॉयड संदर्भ पृष्ठ पर एक लिंक पोस्ट किया है, लेकिन एक नौसिखिया के रूप में मेरे प्रतिनिधि बहुत कम है।

समस्या का इतिहास: मैं ओरेकल पेज से जेसन एन्कोडिंग और डिकोडिंग के बारे में पढ़ रहा था, और मैंने अपने एंड्रॉइडस्टूडियो आईडीई में प्रतिलिपि बनाने और पेस्ट करने की कोशिश की, जिसने तुरंत एक त्रुटि उत्पन्न की, जिसके लिए उसने आयात का सुझाव नहीं दिया सामान्य रूप से कथन करता है। मैं सीखने आया हूं कि इसका मतलब है कि कक्षा अंतर्निर्मित पुस्तकालयों का हिस्सा नहीं है।

समस्या यह थी कि कोड जो मैंने जेसनऑब्जेक्ट (जो javax.json लाइब्रेरी से आता है) में चिपकाया था और JSONObject (जो org.json लाइब्रेरी से आता है) में चिपकाया गया था। जब मैंने एंड्रॉइड पेज और ओरेकल पेज के बीच में अंतर देखा, तो मैंने जेसन से जेएसओएन में अपना कोड बदल दिया और तुरंत मेरे आईडीई ने org.json आयात कथन की पेशकश की।

प्रश्न (ओं): बाहरी पुस्तकालय होने पर ओरेकल कक्षा को डिफ़ॉल्ट पुस्तकालयों का हिस्सा क्यों नहीं है?
क्या JSON पुराना, बहिष्कृत तरीका और जेसन नया, उचित तरीका है?
क्या वे कार्यात्मक रूप से समान हैं? यदि नहीं, तो कृपया उदाहरण प्रदान करें?
क्या कुछ स्थितियां एक के लिए बेहतर हैं और कुछ दूसरे के लिए बेहतर हैं?
उलटा, मुझे किस का उपयोग करना चाहिए, और क्यों (यदि पहले से कवर नहीं किया गया है)?
यदि, javax.json, उस लाइब्रेरी को डाउनलोड करने के लिए सबसे अच्छा (सुरक्षित) स्थान कहां है)?

+4

_ डिफ़ॉल्ट लाइब्रेरी_ एंड्रॉइड पर विकसित करने के लिए आप जिस जेडीके का उपयोग करते हैं, वह एंड्रॉइड द्वारा प्रदान किया जाता है, ओरेकल नहीं। इसके अलावा 'javax.json' जावा ईई का हिस्सा है, जावा एसई नहीं। –

+0

जब मैं सीधे जावा से एंड्रॉइड में चला गया तो मैंने अतिरिक्त जेडीके डाउनलोड नहीं किया। क्या एंड्रॉइडस्टूडियो एप्लिकेशन में वैकल्पिक जेडीके शामिल है? – Phyxius81

उत्तर

11

देर से बिट, लेकिन मैं इस पर अपनी राय साझा करना चाहता था।

मुझे हाल ही में इस समस्या का सामना करना पड़ा जब मुझे दोनों पुस्तकालयों के साथ जावा प्रोजेक्ट मिला और उनका उपयोग उसी समय किया गया।

मुझे लगता है कि org.json को पढ़ने के लिए और 2 मुख्य कारण (मेरी जरूरतों के लिए) के लिए उपयोग करने के लिए, आसान है:

  1. JSONObject अपरिवर्तनीय है। ,

  2. यह कुछ पंक्तियां लेता है सुंदर एक JSONObject या JsonArray मुद्रित करने के लिए, जबकि यह केवल JSONObject को यह करने के लिए 1 लाइन लेता है: आप नहीं पहले से मौजूद JSONObject (javax.json: Add new JsonNumber to existing JsonObject संदर्भ यहाँ) के लिए नया कुंजी/मान जोड़े में जोड़ सकते हैं या JSONArray। उदाहरण:

    StringWriter sw = new StringWriter(); 
    Map<String, Object> properties = new HashMap<>(); 
    properties.put(JsonGenerator.PRETTY_PRINTING, true); 
    
    JsonWriterFactory writerFactory = Json.createWriterFactory(properties); 
    JsonWriter jsonWriter = writerFactory.createWriter(sw); 
    
    jsonWriter.writeObject(jsonObject); //JsonObject created before 
    jsonWriter.close(); 
    String prettyPrintedJSON = sw.toString(); 
    

कोड मैं एक फ़ाइल पर लिखने में एक दांतेदार JSON प्राप्त करने के लिए इस्तेमाल करते हैं यही कारण है कि। और org.json के साथ मुझे केवल jsonObject.toString(4) की आवश्यकता है।

एक और अंतर रचनाकार है। javax.json के साथ JSON बनाने के लिए आपको JsonObjectBuilder की आवश्यकता होगी। एक कदम और इससे बचा जा सकता है।

मुझे यकीन है कि अधिक अंतर हैं (सुनिश्चित नहीं है कि स्ट्रिंग से JsonObject बनाना संभव है) लेकिन ये मेरे विचार हैं।

+1

यह ध्यान दिया जाना चाहिए कि javax.json मौजूदा इंटरफेस का पूर्ण उपयोग करता है जबकि org.json बिल्कुल इंटरफेस के साथ काम करता है, इसलिए उदा। एक JSONArray का उपयोग फ़ोरैच ब्लॉक में नहीं किया जा सकता है। org.json को और अधिक व्यावहारिक बनाया जा सकता है, लेकिन मौजूदा इंटरफेस का उपयोग न करने के लिए डिज़ाइन दोष के रूप में देखा जा सकता है। – GreenThor

+0

'org.codehaus.jettison.json.JSONArray' के बारे में क्या? यह यहां उल्लेखित दो विकल्पों से कैसे संबंधित है? – dokaspar

+0

@dokaspar मैंने उस लाइब्रेरी का उपयोग नहीं किया है जो इतना नहीं कह सकता कि –

0

मैं आपको JSON ऑब्जेक्ट्स के साथ काम करने के लिए Google की json-simple टूलकिट का उपयोग करने की सलाह देता हूं। यह उपयोगी कार्यों को प्रदान करता है और बाहरी पुस्तकालयों पर कोई निर्भरता नहीं है जो एंड्रॉइड ऐप्स के विकास के दौरान एक बड़ी समस्या साबित हुई है।

अपने प्रश्न का उत्तर देने के लिए: यदि आप अपने प्रोजेक्ट में जेसन-सरल का उपयोग नहीं करना चाहते हैं तो आपको org.json से JSONObject का उपयोग करना चाहिए, क्योंकि यह एंड्रॉइड जेडीके द्वारा प्रदान किया गया है। अधिक जानकारी के लिए http://developer.android.com/reference/org/json/JSONObject.html देखें।

+0

मैं इस विषय से अपरिचित, असहमत नहीं हूं। "एंड्रॉइड ऐप्स के विकास के दौरान एक बड़ी समस्या" से आपका क्या मतलब है? (स्रोतों की सराहना की)। इसके अलावा, डेवलपर.android.com क्यों org.json का उपयोग करता है अगर यह एंड्रॉइड विकास के साथ समस्याएं पैदा करता है? – Phyxius81

+0

हाल ही में मुझे पता चला है कि पुराने एंड्रॉइड संस्करणों में कुछ पैकेज ठीक से काम नहीं करते हैं और उन्हें जार ("छायादार") के रूप में डाउनलोड और कार्यान्वित किया जाना है। मुझे यकीन नहीं है कि इस समस्या से org.json कैसे प्रभावित होता है, लेकिन मेरे लिए ग्रैडल के साथ निर्भरताओं को छाया करना बहुत मुश्किल था। मेरे उदाहरण में "org.apache.http.conn.ssl" और बाउंसीकैसल अपेक्षा के अनुसार काम नहीं करता था। – michip96

-1
  1. org.json में JSON स्ट्रिंग को पार्स करने के लिए एक पार्स क्लास नहीं है। जबकि org.json.simple में एक पार्स क्लास है।

  2. org.json.JSONObject गेटर तरीकों की बहुत सारी पूर्णांक, बूलियन, वस्तु, स्ट्रिंग, JSON सारणी, आदि org.json.simple.JSONObject के रूप में सीधे प्राप्त करने के लिए विशिष्ट विधियों शामिल नहीं करता है, ताकि आप हर बार डाली टाइप करने के लिए, जबकि एक विशेष कुंजी का मान रही जरूरत ।

  3. सरल शब्दों में अकेले पार्सिंग के लिए org.json.simple.JSONObject का उपयोग करें और इसे प्रोग्राम के अंदर और उपयोग के लिए org.json.JSONObject में डालें।

+0

'org.json' JSONObject' कन्स्ट्रक्टर को पास करके JSON स्ट्रिंग को पार्स कर सकता है। और ऐसा लगता है कि आप दोनों पुस्तकालयों का उपयोग करने का सुझाव दे रहे हैं, जो निश्चित रूप से भ्रम पैदा करेंगे। एक उठाओ और इसके साथ जाओ। – Gillfish

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