JSON.parse添加属性还是函数?

时间:2016-11-02 17:50:24

标签: javascript json parsing

有没有办法在新创建的对象上使用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或...)

1 个答案:

答案 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();