【发布时间】:2015-09-23 06:33:39
【问题描述】:
我已经多次使用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)
因此,我无法弄清楚出了什么问题。
【问题讨论】:
-
请注意,console.log 是异步的,而 JSON.stringify 是同步的。当您调用 stringify 时,您确定您在屏幕截图上显示的属性(看起来来自控制台)已经存在?
-
没有看到复制问题的代码,我们能做的最好的就是盲目猜测。
-
它是真实属性,还是继承自原型? JSON.stringify 忽略原型,而 console.log 显示所有可枚举属性。
-
@Juhana 有很多代码可以形成这样的对象,只有
JSON.stringify(obj)存在问题。 -
@doldt
console.log不需要异步,请参阅stackoverflow.com/a/23392650/1092711
标签: javascript json stringify