javascript – 如何从JSON恢复原始对象/类型?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何从JSON恢复原始对象/类型?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2188字,纯文字阅读大概需要4分钟。
内容图文
使用eval或JSON.parse可以轻松地将JSON加载到javascript中的对象中.
但是如果你有一个像函数这样的“类”,那么如何将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创建适当的Person实例,但我能得到的只是一个愚蠢的对象.我想知道它是否有可能用原型做一些事情?
我不想要解析JSON的每一行,并将每个变量分配给相应的函数属性,这太难了.我所拥有的实际JSON和函数比上面的例子复杂得多.
我假设可以将函数方法JSONify转换为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
有任何想法吗?
解决方法:
您需要使用reviver功能:
// Registry of types
var Types = {};
function MyClass(foo, bar) {
this._foo = foo;
this._bar = bar;
}
Types.MyClass = MyClass;
MyClass.prototype.getFoo = function() {
return this._foo;
}
// Method which will provide a JSON.stringifiable object
MyClass.prototype.toJSON = function() {
return {
__type: 'MyClass',
foo: this._foo,
bar: this._bar
};
};
// Method that can deserialize JSON into an instance
MyClass.revive = function(data) {
// TODO: do basic validation
return new MyClass(data.foo, data.bar);
};
var instance = new MyClass('blah', 'blah');
// JSON obtained by stringifying an instance
var json = JSON.stringify(instance); // "{"__type":"MyClass","foo":"blah","bar":"blah"}";
var obj = JSON.parse(json, function(key, value) {
return key === '' && value.hasOwnProperty('__type')
? Types[value.__type].revive(value)
: this[key];
});
obj.getFoo(); // blah
别无他法……
内容总结
以上是互联网集市为您收集整理的javascript – 如何从JSON恢复原始对象/类型?全部内容,希望文章能够帮你解决javascript – 如何从JSON恢复原始对象/类型?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。