eval या JSON.parse का उपयोग कर जावास्क्रिप्ट में किसी ऑब्जेक्ट में जेएसओएन लोड करना आसान है।JSON से मूल ऑब्जेक्ट/प्रकार को पुनर्स्थापित कैसे करें?
लेकिन यदि आपके पास उचित "वर्ग" फ़ंक्शन जैसा है, तो आप इसमें JSON डेटा कैसे प्राप्त करते हैं?
उदा।
function Person(name) {
this.name=name;
this.address = new Array();
this.friendList;
this.promote = function(){
// do some complex stuff
}
this.addAddress = function(address) {
this.address.push(address)
}
}
var aPersonJSON = '{\"name\":\"Bob\",\"address\":[{\"street\":\"good st\",\"postcode\":\"ADSF\"}]}'
var aPerson = eval("(" + aPersonJSON + ")"); // or JSON.parse
//alert (aPerson.name); // Bob
var someAddress = {street:"bad st",postcode:"HELL"};
//alert (someAddress.street); // bad st
aPerson.addAddress(someAddress); // fail!
जड़ मैं JSON से उचित व्यक्ति उदाहरण बना करने में सक्षम होने की जरूरत है है, लेकिन सभी मैं प्राप्त कर सकते हैं एक गूंगा वस्तु है। मैं सोच रहा हूं कि प्रोटोटाइप के साथ कुछ करना संभव है?
मैं JSON की प्रत्येक पंक्ति को पार्स नहीं करना चाहता हूं और प्रत्येक चर को अनुरूप कार्यों के गुणों में असाइन करना चाहता हूं, जो बहुत मुश्किल होगा। मेरे पास वास्तविक जेएसओएन और फ़ंक्शंस ऊपर दिए गए उदाहरण से कहीं अधिक जटिल हैं।
मुझे लगता है कि कोई JSON स्ट्रिंग में फ़ंक्शन विधियों को JSONify कर सकता है, लेकिन जैसा कि मुझे परिणामस्वरूप डेटा को जितना संभव हो सके छोटा रखना है, यह एक विकल्प नहीं है - मैं केवल डेटा को स्टोर और लोड करना चाहता हूं, जावास्क्रिप्ट नहीं तरीकों के लिए कोड।
मैं जेएसओएन द्वारा एक उप ऑब्जेक्ट के रूप में लोड डेटा को भी नहीं रखना चाहता हूं अगर मैं इसकी मदद कर सकता हूं (लेकिन एकमात्र तरीका हो सकता है), उदा।
function Person(name) {
this.data = {};
this.data.name=name;
}
var newPerson = new Person("");
newPerson.data = eval("(" + aPersonJSON + ")");
alert (newPerson.data.name); // Bob
कोई विचार?
कृपया जेएसओएन को पार्स करने के लिए ['JSON.parse'] (http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/) का उपयोग करें और' eval' का उपयोग न करें। यदि लक्ष्य ब्राउज़र 'JSON.parse' (यानी आईई 7 या पुराना है) का समर्थन नहीं करते हैं, तो क्रॉकफ़ोर्ड के' json.js' के माध्यम से एक झुकाव (जो आंतरिक रूप से 'eval' का उपयोग करता है लेकिन सैनिटी सत्यापन भी प्रदान करता है) या' json2। जेएस 'आसानी से उपलब्ध है। –
हाय, समस्या eval या parse नहीं है, जो दोनों एक ही untyped वस्तु उत्पन्न करते हैं, मैं जेएसओएन व्यक्ति फक्शन में पाने के लिए एक रास्ता खोजने की कोशिश कर रहा हूँ। इस पर कोई विचार? –
@ जॉन लिटल कभी भी eval का उपयोग नहीं करते हैं, यह कई सुरक्षा मुद्दों (कोड इंजेक्शन इत्यादि) का स्रोत है [इसे पढ़ें] (http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil) – thepoosh