JSON, eval veya JSON.parse kullanarak javascript'te bir nesneye kolayca yüklenebilir.JSON'dan orijinal nesne/tür nasıl geri yüklenir?
Fakat eğer uygun bir "sınıf" işlevi varsa, JSON verilerini ona nasıl alırsınız?
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!
püf noktası ben JSON'dan uygun Kişi örneklerini oluşturmak gerekiyor, ama olsun bütün dilsiz nesnedir. Prototiplerle bir şey yapmanın mümkün olup olmadığını merak ediyorum?
JSON'un her satırını ayrıştırmak ve her bir değişkeni, karşılık gelen işlev özniteliklerine atamak istemiyorum, ki bu çok zor olurdu. Gerçek JSON ve sahip olduğum işlevler yukarıdaki örneklerden daha karmaşıktır.
JSON dizesinde işlevlerin JSONify olabileceğini varsayarak, ancak sonuç verilerinin mümkün olduğunca küçük tutulması gerektiğinden, bu yalnızca bir seçenek değil - yalnızca verileri depolamak ve yüklemek istiyorum, javascript yöntemler için kod.
Ayrıca yardımcı olabiliyorsam JSON tarafından yüklenen verileri bir alt nesne olarak koymak zorunda kalmak istemiyorum (ancak tek yol olabilir), ör.
function Person(name) {
this.data = {};
this.data.name=name;
}
var newPerson = new Person("");
newPerson.data = eval("(" + aPersonJSON + ")");
alert (newPerson.data.name); // Bob
Herhangi bir fikir?
Lütfen JSON'yi ayrıştırmak için değil "JSON.parse" (http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/) ve "eval" kullanmayın. Eğer hedef tarayıcılar JSON.parse'ı desteklemiyorsa (yani IE7 ya da daha eski), Crockford'un json.js'si aracılığıyla bir 'swim' (dahili olarak değerlendirmekle birlikte aynı zamanda akıl sağlığı doğrulaması kullanır) ya da json2'yi kullanır. js' kullanılabilir durumda. –
Merhaba, Sorun aynı türden olmayan nesneyi üreten, değerlendirme veya ayrıştırma değildir, JSON'u Kişi işlevine sokmanın bir yolunu bulmaya çalışıyorum. Bu konuda bir fikrin var mı? –
@JohnLittle asla kullanmayın !, pek çok güvenlik sorununun kaynağıdır (kod enjeksiyonu vb.) [Bunu okuyun] (http://stackoverflow.com/questions/197769/when-is-javascripts-eval-not-evil – thepoosh