JSON.stringify返回[]

时间:2011-08-31 15:48:57

标签: javascript jquery json

为什么JSON.stringify()会返回:

[]

jQuery也是如此:$.JSON.encode()

是什么导致这个?我传入一个简单的对象数组,其中每个对象都有字符串属性。我已经循环并提醒每个对象属性,所有看起来都很好,但由于某种原因,两种编码方法都返回[]

4 个答案:

答案 0 :(得分:65)

在数组声明中

var count_review= new Array() 

而不是这个用途

var count_review={}; 

有效!

答案 1 :(得分:14)

如果你的数组声明为" String"键值返回null

var array = [];
array['name'] = 'johan';
array['age'] = 20;
alert(JSON.stringify(array))// return []

但是如果数组声明为" int" return json string

var array = [];
array[0] = 'johan';
array[1] = 20;
alert(JSON.stringify(array))// return["johan",20]

答案 2 :(得分:10)

虽然上面的答案都是正确的,但要完全理解它肯定需要更多的背景。

JSON是一种通用格式(在支持多种,希望是所有编程语言的意义上),它不完全是JavaScript对象的一对一映射。

因此,为什么会发生这种情况的根本原因是在JSON中(由RFC 7159指定)在JavaScript的Array意义上没有关联数组 - 即其键是关键字的数组字符串。由于阅读RFC规范可能非常耗时,因此最容易在JSON.org网站上看到它(以下重点是我的):

  

JSON基于两种结构:

     
      
  • 名称/值对的集合。在各种语言中,这被实现为对象记录 struct 字典哈希表键控列表 关联数组
  •   
  • 值的有序列表。在大多数语言中,这被实现为 数组 向量列表序列
  •   
     

这些是通用数据结构。实际上,所有现代编程语言都以某种形式支持它们。有意义的是,可与编程语言互换的数据格式也基于这些结构。

     

在JSON中,他们采用以下形式:

     

对象是一组 无序 名称/值对。对象以{(左大括号)开头,以}(右大括号)结束。每个名称后跟:(冒号),名称/值对由,(逗号)分隔。

     

JSON Object definition graph

     

数组是有序的值集合。数组以[(左括号)开头,以](右括号)结尾。值以,(逗号)分隔。

     

JSON Array definition graph

JSON.stringify函数以这样的方式处理这个问题,即假设该数组是一个数组,并且所有键控条目都是注释性的,就像功能对象的元素一样,它们只是从JSON中抛出表示它返回。不幸的是,在今天(2017-09-04)的MDN非正式JavaScript引用中,这种行为没有以明确定义且易于理解的方式记录,所以如果你想帮助它,这里有一些悬而未决的成果醇' Mozilla浏览器。

答案 3 :(得分:9)

我遇到了同样的问题,因为我的json数组键值是字符串字符串。无法更改结构。所以我通过将json数组转换为 json对象,它完全解决了我的问题。 Json对象已成功字符串化。

要将数组更改为对象:

var *your_object* = Object.assign({}, *your_array*);