为什么JSON.stringify()
会返回:
[]
jQuery也是如此:$.JSON.encode()
是什么导致这个?我传入一个简单的对象数组,其中每个对象都有字符串属性。我已经循环并提醒每个对象属性,所有看起来都很好,但由于某种原因,两种编码方法都返回[]
。
答案 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.stringify
函数以这样的方式处理这个问题,即假设该数组是一个数组,并且所有键控条目都是注释性的,就像功能对象的元素一样,它们只是从JSON中抛出表示它返回。不幸的是,在今天(2017-09-04)的MDN非正式JavaScript引用中,这种行为没有以明确定义且易于理解的方式记录,所以如果你想帮助它,这里有一些悬而未决的成果醇' Mozilla浏览器。
答案 3 :(得分:9)
我遇到了同样的问题,因为我的json数组键值是字符串字符串。无法更改结构。所以我通过将json数组转换为 json对象,它完全解决了我的问题。 Json对象已成功字符串化。
要将数组更改为对象:
var *your_object* = Object.assign({}, *your_array*);