2011-08-31 17 views
35

क्यों होता JSON.stringify() वापसी:JSON.stringify लौटने []

[] 

ही jQuery के साथ होता है: $.JSON.encode()

यह क्या कारण हो सकता है? मैं वस्तुओं की एक साधारण सरणी में गुजर रहा हूं, जहां प्रत्येक ऑब्जेक्ट में स्ट्रिंग गुण होते हैं। मैंने प्रत्येक ऑब्जेक्ट गुणों को लूप किया है और चेतावनी दी है और सभी ठीक दिखते हैं, लेकिन किसी कारण से दोनों एन्कोड विधियां [] लौट रही हैं।

+11

'JSON.stringify ([]) ===" [] "'। वस्तुओं की आपकी सरणी शायद खाली है। – Gumbo

+0

आवश्यक खाली नहीं है, लेकिन गैर-गणनीय तत्व। – evilpie

+1

मैंने इसे हल कर लिया है, यह स्ट्रिंग सरणी कुंजी है। मेरे 8 घंटे के लिए अपना उत्तर पोस्ट नहीं कर सकता। – Chris

उत्तर

49

अपने सरणी घोषणा

var count_review= new Array() 
इस प्रयोग

var count_review={}; 

यह काम करता है के बजाय

में!

+6

वे दो पंक्तियां समान नहीं हैं। पहला एक सरणी है, दूसरी वस्तु है। ऐरे: 'var count_review = [];' ... – War10ck

+1

यदि आप जावास्क्रिप्ट ऑब्जेक्ट्स को सहयोगी सरणी के रूप में उपयोग कर रहे हैं (उर्फ, int कुंजी के बजाय स्ट्रिंग कुंजियों का उपयोग करके), यह उत्तर सही है। – jgerman

+1

'var my_array = [] 'का उपयोग इस मामले में मेरे लिए काम नहीं करता है (एंड्रॉइड कॉर्डोवा)। बाद में सरणी पास करने के बावजूद 'var my_array = {}' का उपयोग करना सुनिश्चित करें। इस समस्या को हल करने के लिए। –

10

अपने सरणी के रूप में "स्ट्रिंग" कुंजी मान वापसी अशक्त यह घोषणा करते हैं

var array = []; 
array['name'] = 'johan'; 
array['age'] = 20; 
alert(JSON.stringify(array))// return [] 

लेकिन सरणी के रूप में "पूर्णांक" वापसी json स्ट्रिंग यह घोषणा करते हैं

var array = []; 
array[0] = 'johan'; 
array[1] = 20; 
alert(JSON.stringify(array))// return["johan",20] 
2

जवाब ऊपर पूरी तरह से करने के लिए, सत्य हैं जबकि समझें कि इसे निश्चित रूप से अधिक संदर्भ की आवश्यकता है।

जेएसओएन एक सार्वभौमिक प्रारूप है (एकाधिक समर्थन करने की भावना में, उम्मीद है कि सभी प्रोग्रामिंग भाषाएं) जो पूरी तरह से जावास्क्रिप्ट ऑब्जेक्ट्स का 1-से-1 मैपिंग नहीं है।

तो ऐसा क्यों होता है कि यह क्यों होता है कि JSON में (जैसा कि RFC 7159 द्वारा निर्दिष्ट किया गया है) जावास्क्रिप्ट के Array अर्थ में कोई सहयोगी सरणी नहीं है - यानी सरणी जिनकी चाबियाँ तार हैं। आरएफसी चश्मा पढ़ने के बजाय समय लेने वाली हो सकते हैं, यह सबसे आसानी से JSON.org वेबसाइट जहां यह कहते हैं की चोटी पर देखा जा सकता है (नीचे जोर से कुछ मेरा है):

JSON दो संरचनाओं पर बनाया गया है:

  • नाम/मूल्य जोड़े का संग्रह। विभिन्न भाषाओं में, यह एक वस्तु, रिकॉर्ड, struct, शब्दकोश, हैश तालिका, बंद सूची, या साहचर्य सरणी के रूप में महसूस किया है।
  • एक आदेशों की सूची आदेश दिया गया। सबसे अधिक भाषाओं में, यह एक सरणी, वेक्टर, सूची, या अनुक्रम के रूप में महसूस किया है।

ये सार्वभौमिक डेटा संरचनाएं हैं। लगभग सभी आधुनिक प्रोग्रामिंग भाषाएं उन्हें एक रूप में या किसी अन्य रूप में समर्थन देती हैं।यह समझ में आता है कि प्रोग्रामिंग भाषाओं के साथ एक परिवर्तनीय डेटा प्रारूप भी इन संरचनाओं पर आधारित होगा।

JSON में, वे इन रूपों पर ले:

एक वस्तु एक अव्यवस्थित नाम/मान युग्म का सेट है। एक वस्तु { (बाएं ब्रेस) के साथ शुरू होती है और } (दाएं ब्रेस) के साथ समाप्त होती है। प्रत्येक नाम के बाद : (कोलन) होता है और नाम/मान जोड़े , (अल्पविराम) से अलग होते हैं।

JSON Object definition graph

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

JSON Array definition graph

JSON.stringify समारोह में इस तरह तरह से है कि कि सरणी संभालने एक सरणी होने के लिए लक्षित है, और सभी बंद प्रविष्टियों annotative कर रहे हैं, इतना तत्वों कि समारोह वस्तुओं रहे हैं की तरह इस संभालती है, वे तो बस फेंक दिया जाता है जेएसओएन प्रतिनिधित्व से बाहर यह लौटता है। दुर्भाग्य से इस व्यवहार को अनधिकृत जावास्क्रिप्ट संदर्भ में एक अच्छी तरह से परिभाषित और आसानी से समझने योग्य तरीके से दस्तावेज नहीं किया गया है जो MDN आज (2017-09-04) है, इसलिए अगर आप ओल 'मोज़िला की मदद करना चाहते हैं तो यहां कुछ कम लटकते फल हैं।

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