javascript - JSON.stringify()不能按预期工作

标签 javascript json stringify

我已经使用过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/

相关文章:

java - BitSet 的 JSON 序列化不起作用

javascript - 在 JSON.stringify 中使用变量

perl - 如何将数组转换为散列,并将变量名映射为 Perl 中的键?

javascript - 如何在 Javascript 中对数组进行字符串化?

javascript - requirejs 的注入(inject)规则

javascript - 下拉框依赖于在另一个下拉框中选择的选项

javascript - 在 Coffeescript 中将 while 循环转换为 for 循环

javascript - 在 React 中检查密码验证

json - qemu :commandline in libvirt? "Permission denied"错误如何解决

ios - 获取行数但不打印