我已经使用过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,但是当然不是我想要的方式。
如我所见
没有周期。
它不太深。 (只有深度3)
因此,我无法弄清楚出了什么问题。
最佳答案
好吧,我建议您创建一个函数来克隆您的对象,而该对象不包含我想为angular设置的$$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
克隆对象之后,可以对其进行字符串化而没有任何问题。
关于javascript - JSON.stringify()不能按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31240316/