2012-05-08 16 views
6

मैं hava JSON ऑब्जेक्ट:जावास्क्रिप्ट अपवाद: Uncaught TypeError: JSON के लिए परिपत्र संरचना परिवर्तित

[#1={id:"2012-05-04", title:"Scheduled", start:(new Date(1336096800000)), source:{events:[#1#], className:[]}, _id:"2012-05-04", _start:(new Date(1336089600000)), end:null, _end:null, allDay:true, className:[]}] 

मैं इसे stringify करने की कोशिश:

var test = JSON.stringify(resourceVacation, censor(resourceVacation)); 

function censor(censor) { 
    return (function() { 
     var i = 0; 
     return function(key, value) { 
      if (i !== 0 && typeof(censor) === 'object' && typeof(value) == 'object' && censor == value) 
       return '[Circular]'; 

      ++i; // so we know we aren't using the original object anymore 

      return value; 
     } 
    })(censor); 
} 

मैं सेंसर का उपयोग यहाँ उल्लेख किया: Chrome sendrequest error: TypeError: Converting circular structure to JSON n

हालांकि मुझे ब्राउज़र पर निम्नलिखित अपवाद मिलता है:

enter image description here

मैं मोज़िला ब्राउज़र में toSource() का उपयोग कर पिछले JSON ऑब्जेक्ट है:

यहाँ जावा स्क्रिप्ट वस्तु है। कोई विचार यह कैसे ठीक करें !!

============================ अद्यतन ================= 1 -Initially: =======

असल में मैं तुम्हारे साथ शुरू से ही scnerio साझा करने की आवश्यकता मैं एक रूप है और अंत में मैं जावा स्क्रिप्ट वस्तु का निर्माण जो है:

#1=[{id:"2012-05-03", title:"Scheduled", start:(new Date(1336010400000)), source:{events:#1#, className:[]}, _id:"2012-05-03", _start:(new Date(1336003200000)), end:null, _end:null, allDay:true, className:[]}] 

इस वस्तु सामान्य रूप से stringified है ... ध्यान दें कि यह "एक है कि बाद में अपवाद से निकाल देते थे करने के लिए ठेठ एस।

2- फिर ला Ter मैं का उपयोग कर इस सरणी से वस्तुओं को हटा दें:

function deleteVacation(day) { 
    for (var index = 0; index < resourceVacation.length; index++) { 
     if (resourceVacation[index].id == day) 

      resourceVacation.splice(index,1); 
    } 

3-जब मैं उस सरणी stringify करने के बाद मैं एक ही वस्तु को नष्ट कर दिया की कोशिश, मैं उल्लेख अपवाद मिलता है। तो .. एयू विचार पहली बार क्यों पारित हुआ और दूसरी बार विफल रहा !!

+0

अपने JSON को मान्य करें। यह अमान्य प्रतीत होता है: http://www.jsonlint.org –

+0

दरअसल जो मेरे पास पहले से है वह ऑब्जेक्ट की सरणी है और मैंने उस जेसन को पाने के लिए obj.toSource() का उपयोग किया। – Echo

+0

मैंने अपनी पोस्ट अपडेट की है। अगर आपको कोई चिंता है तो कृपया मुझे वापस खिलाएं। – Echo

उत्तर

8

आप JSON एन्कोड दिनांक ऑब्जेक्ट्स नहीं कर सकते हैं।

json.org से: "मान डबल कोट्स, या संख्या, या सत्य या गलत या शून्य, या ऑब्जेक्ट या सरणी में एक स्ट्रिंग हो सकता है। इन संरचनाओं को घोंसला जा सकता है।"

+1

Iam आप का पालन नहीं कर रहे हैं, क्या आप और विस्तार कर सकते हैं! – Echo

+2

@Echo: यह बहुत आसान है।जेएसओएन में मूल्य सीमित हैं कि वे किस प्रकार के हो सकते हैं। जवाब कहता है कि तिथियां उन प्रकारों में से एक नहीं हैं। यदि आप एक तिथि चाहते हैं, तो उसमें घूमने का एक आसान तरीका तारीख को स्ट्रिंग या नंबर में बदलना है। इसके लिए आपको इसकी आवश्यकता के आधार पर, एक या दूसरा बेहतर हो सकता है। – cHao

+0

दरअसल, मुझे लगता है कि यह केवल समस्या का हिस्सा हो सकता है। त्रुटि (और वह अन्य उत्तर जो आपने लिंक किया है) कह रहा है कि आप उस ऑब्जेक्ट को एन्कोड करने का प्रयास कर रहे हैं जिसमें परिपत्र संदर्भ हैं। मैं 'स्टार्ट' और' _start' मानों को हटाने का प्रयास करता हूं, और यदि यह ठीक नहीं करता है, तो सरणी या ऑब्जेक्ट गुणों को हटा दें। यदि यह ठीक करता है, तो यह सुनिश्चित करने के लिए जांचें कि आपके द्वारा निकाले गए सरणी या ऑब्जेक्ट्स में से कोई भी 'श्रृंखला में उच्च' का संदर्भ नहीं देता है। – dontGoPlastic

7

समस्या स्रोत है - object which is a circular reference

आपको स्रोत ऑब्जेक्ट के बिना ऑब्जेक्ट की एक प्रति बनाना चाहिए।

इस प्रकार मैंने फुल कैलेंडर में इस मुद्दे को हल किया।

+0

बहुत बढ़िया - धन्यवाद –

+0

कोई ऐसा है जो मुझे बता सकता है कि इसे कैसे प्राप्त किया जाए? –

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