2012-03-08 14 views
32

मुझे पता है कि अधिकांश प्रोग्रामिंग परिदृश्यों में, 0 तत्व होने पर प्राथमिक संग्रह खाली संग्रह के लिए प्राथमिकता है। हालांकि, जेएसओएन (जावास्क्रिप्ट की तरह) का उपभोग करने वाली अधिकांश भाषाएं खाली सूचियों/वस्तुओं को वास्तविक और शून्य के रूप में गलत मानती हैं। उदाहरण के लिए इस और सत्य जावास्क्रिप्ट में एक वस्तु होगा:खाली बनाम शून्य के लिए JSON में सम्मेलन क्या है?

{ 
    "items_in_stock": {"widgets":10, "gadgets": 5} 
} 

लेकिन यह भी सच है:

{ 
    "items_in_stock": {} 
} 

और यह गलत है:

{ 
    "items_in_stock": null 
} 

वहाँ एक सम्मेलन पर है जेएसओएन के लिए खाली वस्तुओं/सूचियां? और संख्याओं, बूलियन, और तारों के बारे में क्या?

+0

संबंधित: [JSON में शून्य मान शामिल होना चाहिए] (http://stackoverflow.com/q/11003424/1048572) – Bergi

+0

संबंधित प्रश्न यहां उत्तर नहीं दिया गया है: JSON कैसे खाली व्यवहार करता है तार। और इसके अतिरिक्त, एक गैर-स्ट्रिंग ऑब्जेक्ट के लिए शून्य-लंबाई वाली स्ट्रिंग को शून्य के रूप में माना जाएगा? – tdugan

उत्तर

47

यदि अपेक्षित रिटर्न प्रकार एक सरणी है तो यह एक खाली सरणी वापस करने के लिए अच्छा प्रोग्रामिंग अभ्यास है। यह सुनिश्चित करता है कि जेसन का रिसीवर मूल्य को तुरंत सरणी के रूप में देख सकता है और पहले यह जांचना नहीं है कि यह शून्य है या नहीं। खाली वस्तुओं ({}) के साथ यह वही तरीका है। स्ट्रिंग्स, बूलियन और इंटीग्रर्स के पास 'खाली' फॉर्म नहीं है, इसलिए शून्य मानों का उपयोग करना ठीक है।

इसके लिए मेरा शब्द न लें। जोशुआ ब्लॉच में उत्कृष्ट पुस्तक "प्रभावी जावा" में वह कुछ बहुत अच्छे जेनेरिक प्रोग्रामिंग प्रथाओं का वर्णन करता है (अक्सर अन्य प्रोग्रामिंग लैंगेज पर भी लागू होता है)। नल के बजाए खाली संग्रह लौटाना उनमें से एक है। यहां उनकी पुस्तक के उस हिस्से का एक लिंक दिया गया है: http://jtechies.blogspot.nl/2012/07/item-43-return-empty-arrays-or.html

+1

जावास्क्रिप्ट में आप जांचेंगे कि क्या (items_in_stock == null) या आप जांचेंगे कि क्या (item_in_stock)? क्या जावास्क्रिप्ट डेवलपर भाषा की "सच्ची/झूठी" विशेषताओं का उपयोग नहीं करना पसंद करते हैं? – rzrelyea

+1

ज्यादातर लोग इसका बहुत उपयोग करते हैं। व्यक्तिगत रूप से मैं सच्चाई/झूठी कोड का उपयोग करने से बचने की कोशिश करता हूं, हालांकि इसका लाभ (कम कोड) है। यह बग ट्रैक करने के लिए मुश्किल हो सकता है। उदाहरण के लिए: कई लोग इस तरह के फ़ंक्शन पैरा के लिए डिफ़ॉल्ट मान सेट करते हैं: _function func (a) {a = a || ''; ...} _। जब _a_ अपरिभाषित होता है, शून्य, 0, -1, '', झूठी या NaN यह मान प्राप्त करेगा ', जो आपके इरादे से हो सकता है या नहीं हो सकता है (ज्यादातर आप केवल अपरिभाषित या शून्य चाहते हैं)। इससे अजीब व्यवहार हो सकता है। बहुत से लोग इसका उपयोग करते हैं हालांकि यह सुविधाजनक है। – koenpeters

+1

मुझे नहीं लगता कि आपके पास बैक अप लेने के लिए कोई दस्तावेज़ लिंक है? मैं इस चीज के एपीआई डेवलपर को मनाने की कोशिश कर रहा हूं, लेकिन यह एक उग्र लड़ाई है। – MikeyWard

4

"जेएसओएन के पास एक विशेष मूल्य है जिसे नल कहा जाता है जिसे किसी भी प्रकार के डेटा पर सेट किया जा सकता है जिसमें सरणी, ऑब्जेक्ट्स, संख्या और बूलियन प्रकार शामिल हैं।"

"जेएसओएन खाली अवधारणा सरणी और वस्तुओं के लिए लागू होती है ... डेटा ऑब्जेक्ट में खाली सूचियों की अवधारणा नहीं है। इसलिए, उन गुणों के लिए डेटा ऑब्जेक्ट पर कोई कार्रवाई नहीं की जाती है।"

Here मेरा स्रोत है।

+1

आपके द्वारा संदर्भित स्रोत से पता चलता है कि कैसे नल और खाली वस्तुओं/सरणी दोनों का उपयोग करना है। हो सकता है कि मैं इसे सही ढंग से नहीं पढ़ रहा हूं लेकिन यह एक दूसरे के ऊपर सुझाव नहीं देता है। और यह पता नहीं लगाता है कि जेएसओएन की जावास्क्रिप्ट खपत किस प्रकार पसंद करती है। – rzrelyea

+0

खाली स्ट्रिंग के बारे में क्या। हम उन मुद्दों को देख रहे हैं जहां JSON खाली स्ट्रिंग (शून्य लंबाई स्ट्रिंग) को शून्य (खाली फ़ील्ड) के रूप में मानता है। – tdugan

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