它很容易使用eval或JSON.parse將JSON加載到JavaScript中的對象中。如何從JSON恢復原始對象/類型?
但是,如果你有一個合適的「類」功能,你如何獲得JSON數據?
E.g.
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和函數比上面的例子複雜得多。
我假設可以JSON化函數方法到JSON字符串,但由於我需要保持結果數據儘可能小這不是一個選項 - 我只想存儲和加載數據,而不是JavaScript代碼的方法。
我也不想將JSON加載的數據作爲子對象,如果我可以幫助它(但可能是唯一的方法),例如
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。如果目標瀏覽器不支持'JSON.parse'(即IE7或更舊版本),則可以通過Crockford的'json.js'(它在內部使用'eval',但也提供了完整性驗證)或'json2'。 js'是隨時可用的。 – 2012-12-25 02:19:47
嗨,問題不是eval或解析,這兩個產生相同的無類型對象,我試圖找到一種方法來獲取JSON到人功能。對此有何想法? –
@JohnLittle永遠不會使用eval!,它是許多安全問題的源頭(代碼注入等)[閱讀全文](http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-vil ) – thepoosh