我多次使用JSON.stringify()
并且我知道一些问题,例如(here中所述):
但是,我在对象上面临不正确的字符串化操作,如下所示:
在控制台上运行JSON.stringify(obj)后,我就明白了。
"[{"$$hashKey":"object:103",
"ProductCategories": [{"Id":2,"ShopProductCategoryName":"Drink","isSelected":true}
{"Id":3,"ShopProductCategoryName":"Food","isSelected":true}]
}]"
它只会将ProductCategories
和$$hashKey
字符串化,这是完全出乎意料的。
如果我从obj
创建新对象并对其进行字符串化,则返回正确的JSON。
var newObj = { // Creates new object with same properties.
AllProductCategories: obj.AllProductCategories,
Id: obj.Id,
LabelName: obj.LabelName,
Percentages: obj.Percentages,
ProductCategories: obj.ProductCategories
}
JSON.stringify(newObj); // Returns correct JSON.
我使用代码强制将对象发送到web api,但当然不是我想要的方式。
如我所见,
因此,我无法弄清楚出了什么问题。
答案 0 :(得分:0)
好吧,我建议你创建一个克隆你的对象的函数,而不是我想要的$$hashKey
属性设置:
function cloneObj (obj) {
var cloned = JSON.parse(JSON.stringify(obj));
delete cloned.$$hashKey;
for(var key in cloned) {
if(typeof cloned[key] === 'object') {
cloned[key] = cloneObj(cloned[key]);
}
}
return cloned;
}
在没有$$hashKey
的情况下克隆对象后,您可以毫无问题地对其进行字符串化。