有没有办法在新创建的对象上使用JSON.parse函数来添加属性或函数(无论它们的嵌套级别是什么)?
使用reviver选项(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) 我知道在解析json时我可以删除我不想要或不关心的属性。
JSON.parse(
'{"name":"toplevel",'+
' "gibberish":"...",'+
' "children":['+
' {"name":"child1",'+
' "gibberish":"..."'+
' },'+
' {"name":"child2",'+
' "gibberish":"..."'+
' }'+
' ]'+
'}'
,(key,value)=>{
if (key=="gibberish")
{
return undefined;
}
return value
});
=>
{"name":"toplevel"
"children":[
{"name":"child1"},
{"name":"child2"}
]
}
上面的代码删除了创建的所有对象的乱码属性。 现在我该怎么做才能添加一个属性(比如uniqueID)?
我应该再次遍历对象树吗? (并处理typeOf(及其bug)以猜测属性是否为对象而不是null或Array或...)
答案 0 :(得分:0)
您可以创建具有所需行为的类,然后将JSON数据分配给实例。
function Class() {...}
Class.prototype.accept = function(visitor) {...};
Class.prototype.copyFromJSON = function() {
delete this.gibberish;
this.children = this.children.map(function(child) {
child = Object.assign(new ChildClass, child);
child.copyFromJSON();
return child;
});
};
function ChildClass() {...}
ChildClass.prototype.copyFromJSON = function() {
delete this.gibberish;
...
}
var instance = Object.assign(new Class, JSON.parse(json));
instance.copyFromJSON();