为什么会JSON.stringify()
回报:JSON.stringify返回[]
[]
的情况与此相同的jQuery:$.JSON.encode()
这是什么原因?我传入一个简单的对象数组,其中每个对象都有字符串属性。我已经循环并提醒每个对象的属性和所有看起来很好,但由于某种原因,两种编码方法返回[]
。
为什么会JSON.stringify()
回报:JSON.stringify返回[]
[]
的情况与此相同的jQuery:$.JSON.encode()
这是什么原因?我传入一个简单的对象数组,其中每个对象都有字符串属性。我已经循环并提醒每个对象的属性和所有看起来很好,但由于某种原因,两种编码方法返回[]
。
在你的数组声明
var count_review= new Array()
,而不是这个用
var count_review={};
它的作品!
如果您的数组声明为“字符串”的键值返回NULL
var array = [];
array['name'] = 'johan';
array['age'] = 20;
alert(JSON.stringify(array))// return []
但如果数组声明为“INT”返回JSON字符串
var array = [];
array[0] = 'johan';
array[1] = 20;
alert(JSON.stringify(array))// return["johan",20]
虽然上述回答是真实,充分理解它肯定需要更多的上下文。
JSON是一种通用格式(支持多种希望所有编程语言),它不完全是JavaScript对象的1对1映射。
所以造成这种情况的根本原因是在JSON中(如RFC 7159所指定的),在JavaScript的Array
意义上没有关联数组 - 即键的字符串为数组的数组。在阅读RFC规范可能会相当费时,可以最容易看到的JSON.org网站,它说的顶部(以下一些重点的是我):
JSON是建立在两个结构:
- 名称/值对的集合。在不同的语言中,这实现为对象,记录,结构,字典,哈希表,键列表,或关联数组。
- 安有序列表值。在大多数语言,这被实现为阵列,矢量,列表,或序列。
这些是通用数据结构。几乎所有的现代编程语言都以不同的形式支持它们。有意义的是,与编程语言可互换的数据格式也基于这些结构。
在JSON,它们采取这些形式:
一种对象为无序组名称/值对。一个对象以
{
(左大括号)开头,以}
(右大括号)结尾。每个名称后跟:
(冒号),名称/值对由,
(逗号)分隔。数组是值的有序集合。一个数组以
[
(左括号)开头并以]
(右括号)结尾。值由,
(逗号)分隔。
的JSON.stringify
函数以这样的方式,假设阵列旨在是一个数组,并且所有键控条目是注释性,所以很象是函数对象元素处理此,他们只是抛出它返回的JSON表示之外。不幸的是,这种行为没有在今天(2017-09-04)的非官方JavaScript参考文件中以MDN明确定义且易于理解的方式记录,因此如果您想帮助Mozilla浏览器,这里是一些低下的成果。
'JSON.stringify([])===“[]”'。你的对象数组可能是空的。 – Gumbo
不需要为空,但是不可枚举的元素。 – evilpie
我解决了这个问题,它是字符串数组键。不能张贴我自己的答案另外8个小时。 – Chris