JSON.stringify抛出错误。

13 浏览
0 Comments

JSON.stringify抛出错误。

var Products = [

{ id: 0, product: '酸苹果', price: 10, count: 1, product_thumb: 'resources/css/apple.png' },

{ id: 1, product: '30 dsfdf', price: 20, count: 1, product_thumb: 'resources/css/croissant.png' },

{ id: 2, product: '折扣咖啡', price: 30, count: 1, product_thumb: 'resources/css/coffecup.png' },

{ id: 3, product: '30 甜甜圈套餐', price: 40, count: 1, product_thumb: 'resources/css/donut.png' },

{ id: 4, product: 'Invisishield', price: 50, count: 1, product_thumb: 'resources/css/apple.png' },

{ id: 5, product: '粉色杯子蛋糕', price: 60, count: 1, product_thumb: 'resources/css/icecream.png' },

{ id: 6, product: '草莓冰淇淋', price: 70, count: 1, product_thumb: 'resources/css/softy.png' }

]

我试图将上述产品数组编码成JSON字符串,但是出现了以下错误:类型错误:将环状结构转换为JSON

更新(根据评论):

我想做的是,我声明一个变量product = []; 然后当用户添加产品到购物车时,我执行:var productObject = { id: id, product: name, price: price, count: 1, product_thumb: img }; 当用户点击完成时,我将数组取出并想要将其转换为json并发送到我的web服务。问题是当我执行JSON.stringify时,会出现错误。product.push(productObject);

0
0 Comments

当我们在对象中出现循环引用的情况时,会出现"TypeError: Converting circular structure to JSON"错误。例如,我们定义了一个对象obj,并且在其中引用了自身:

var obj = {};
obj.a = {b:obj};

如果我们浏览这个对象,我们会发现存在一个循环引用的关系:obj->a->b->obj->...。因此,当我们使用JSON.stringify(obj)时会抛出错误。

同样,如果我们在对象中包含了DOM对象(如window、document等),由于它们或其子对象引用了自身,也会发生这种错误。

解决这个问题的方法是使用第三方库来序列化对象,如`circular-json`。这个库能够正确处理循环引用,避免抛出错误。

var circularJson = require('circular-json');
var obj = {};
obj.a = {b:obj};
var jsonString = circularJson.stringify(obj);

通过使用`circular-json`库,我们可以正确地将包含循环引用的对象转换为JSON字符串,避免了抛出错误。

参考链接:[Serializing object that contains cyclic object value](https://stackoverflow.com/a/9382383/2162226)

0
0 Comments

问题的原因是在使用JSON.stringify函数时抛出错误。解决方法是使用Sencha的Ext.encode函数替代JSON.stringify。

在这个问题中,用户在购物车中添加产品时,将产品对象添加到一个名为product的数组中。当用户点击完成时,希望将这个数组转换成JSON格式并发送到web服务。然而,当使用JSON.stringify函数时,出现了错误。

经过进一步的讨论,用户解释说他正在使用Sencha框架。因此,解决方法是使用Sencha提供的Ext.encode函数来代替JSON.stringify。用户将产品对象数组productSelectedList转换成一个新的数组arr,并将arr转换成JSON格式的字符串jsonText。

以下是解决方法的代码示例:

var arr = [];
for (i = 0; i < productSelectedList.length; i++) {
  if (productSelectedList[i].data != null) {
    arr[i] = productSelectedList[i].data;
  }
}
var jsonText = Ext.encode(arr);

通过这种方式,用户成功地将产品对象数组转换成JSON格式的字符串,然后可以将其发送到web服务。

0