Sunday, 15 May 2011

javascript - encoding json in jQuery call -


मेरे पास एक जेसन है:

  {"one \ -test": { "नाम": "एक \ -test", "link": "xxx"}, "दो \ -test": {"नाम": "दो \ -टीस्ट", "लिंक": "yyy"}}   

और मेरी जावास्क्रिप्ट फ़ाइल में मैं एक jQuery कॉल का उपयोग करता हूं

  var myJson; JQuery.getJSON ('path / myJson.json', फ़ंक्शन (डेटा) {myJson = डेटा;});  

दुर्भाग्यवश कॉल सफल नहीं होता है, इस अर्थ में कि myJson = data निष्पादित नहीं किया गया है (मैंने कथन संदेश को बयान से पहले ही रखने की कोशिश की है लेकिन यह को निष्पादित नहीं किया गया है) और चर myJson अभी भी अपरिभाषित है (मैं $। जब के साथ कॉल के अंत के लिए इंतजार किया था और मैंने myJson < कोड>)। सबसे अधिक संभावना यह समस्या नाम एक \ - टेस्ट और दो \ -टेस्ट (वर्ण '\' और '-') के प्रारूप हो सकती है, क्योंकि पथ सही है ( मुझे पूरा यकीन है)। मैं उन नामों को नहीं बदल सकता, फिर मुझे कुछ और के बारे में सोचना होगा। कोई उपाय? मैंने इस तरह एक एजेक्स कॉल करने की कोशिश की:

  फ़ंक्शन getJson (myJson) {$ .ajax ({प्रकार: "GET", url: "path / myJson.json", डेटा: {} , कंटेंट टाइप: "एप्लिकेशन / जेसन; वर्णसेट = यूटीएफ -8", डेटाटाइप: "जेसन", सफलता: फ़ंक्शन (डेटा) {myJson = डेटा;}}); }  

लेकिन परिणाम अभी भी वही है।

संपादित करें

अगर मैं उसी कोड को निष्पादित करने की कोशिश करता हूं {"नाम": "एक \ -test", "link": "xxx"}, "ट्वोटेस्ट": {"नाम": "दो \ - परीक्षण "," लिंक ":" yyy "}}

यह सफल होता है। यह "खराब प्रारूप" का एक अन्य प्रमाण है

अगर मैं उसी कोड को निष्पादित करने की कोशिश करता हूं :

...

यह सफल होता है यह "खराब प्रारूप" का एक अन्य प्रमाण है

ठीक है, यह हमें बताता है कि जेएसओएन पार्टर का उपयोग किया जा रहा है उन "वन \ -टीस्ट" स्ट्रिंग्स को अमान्य के रूप में व्याख्या कर रहा है । आप उस तरह से पढ़ सकते हैं (और ऐसा प्रतीत होता है कि लोग ऐसा करते हैं, क्योंकि यह उन तारों को खारिज करता है), हालांकि

कोई भी चरित्र बच सकता है।

... जो तर्क देता है कि जबकि व्यर्थ, \ से पहले - एक त्रुटि नहीं होनी चाहिए लेकिन शायद आरएफसी का अर्थ है कि किसी भी पात्र को यूनिकोड से बचने या इसी तरह से बचाना पड़ सकता है।

सबसे अच्छी चीज होगी जो आपने कही थी कि आप नहीं कर सकते: JSON को ठीक करें सबसे अच्छे-अनावश्यक- सबसे खराब-समस्याग्रस्त \ से पहले -

अगला सबसे अच्छी बात होगी कुछ पूर्व प्रसंस्करण करना आप JSON को पार्स करने की कोशिश करने के लिए jQuery नहीं कहकर सीधे स्ट्रिंग प्रतिस्थापन कर सकते हैं:

  $। Ajax ({type: "GET", url: "path / MyJson.json ", डेटा: {}, डेटाप्रकार:" टेक्स्ट ", // & lt; === सफलता को पार्स न करें: फ़ंक्शन (डेटा) {// ...}});  

फिर सफलता कर रही है:

  myJson = JSON.parse (data.replace (/ \\ - / g, "-"));  

... हालांकि निश्चित तौर पर यह एक भोली प्रतिस्थापन है।

यहां उस दूसरे बिट का डेमो है:

  var डेटा = '{' + '' One \ -test ": {'+'" नाम ":" एक \ -test ", '+'" लिंक ":" xxx "'+'}, '+'" दो \ परीक्षण ": {'+'" नाम ":" दो \ -टैस्ट ", '+'" लिंक ":" yyy "'+'} '+'} '; Var myJson = JSON.parse (डेटा.रेले (/ \\ - / g, "-")); snippet.log (myJson [ "एक-परीक्षण"] नाम।); // "एक-टेस्ट"  
  & lt;! - स्क्रिप्ट `स्निपेट` ऑब्जेक्ट प्रदान करता है, देखें Http://meta.stackexchange.com/a/242144/134069 - & gt; & Lt; script src = "http://tjcrowder.github.io/simple-snippets-console/snippet.js" & gt; & lt; / स्क्रिप्ट & gt;  
< / P>

No comments:

Post a Comment