为什么 JSON.stringify()会回来:
JSON.stringify()
[]
JQuery: $.JSON.encode()也是如此
$.JSON.encode()
是什么引起的?我传入了一个简单的对象数组,其中每个对象都具有字符串属性。我已经循环遍历并警告了每个对象属性,一切看起来都很好,但是由于某种原因,两个 encode 方法都返回 []。
在数组声明中
var count_review= new Array()
而不是这样使用
var count_review={};
成功了!
如果数组使用的是 string键值,而不是 int,则字符串化忽略该值。
string
int
var array = []; array['name'] = 'johan'; array['age'] = 20; alert(JSON.stringify(array))// return []
但是如果 array 使用“ int”作为键,那么 stringify将返回它。
stringify
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网站的顶部(下面的一些重点是我的) :
Array
JSON 基于两种结构: 名称/值对的集合。在各种语言中,这被实现为 对象、 记录、 结构、 字典、 哈希表、 键控列表或 关联数组。 值的一个 订购清单。在大多数语言中,这是以 < strong > array 、 矢量、 名单或 序列的形式实现的。 这些是通用的数据结构。几乎所有现代编程语言都以这种或那种形式支持它们。与编程语言可互换的数据格式也基于这些结构是有意义的。 在 JSON,它们采取以下形式: 对象是名称/值对的 无序集合。对象以 {(左大括号)开始,以 }(右大括号)结束。每个名称后面跟着 :(冒号) ,名称/值对用 ,(逗号)分隔。 数组是值的有序集合。数组以 [(左括号)开始,以 ](右括号)结束。值由 ,(逗号)分隔。
JSON 基于两种结构:
这些是通用的数据结构。几乎所有现代编程语言都以这种或那种形式支持它们。与编程语言可互换的数据格式也基于这些结构是有意义的。
在 JSON,它们采取以下形式:
对象是名称/值对的 无序集合。对象以 {(左大括号)开始,以 }(右大括号)结束。每个名称后面跟着 :(冒号) ,名称/值对用 ,(逗号)分隔。
{
}
:
,
数组是值的有序集合。数组以 [(左括号)开始,以 ](右括号)结束。值由 ,(逗号)分隔。
[
]
JSON.stringify函数以这样的方式处理这个问题: 假设数组是一个数组,并且所有键控条目都是注释性的,就像函数对象的元素一样,它们只是从它返回的 JSON 表示中被抛出。不幸的是,在非官方的 JavaScript 引用 MDN(2017-09-04)中,这种行为并没有以一种定义明确、易于理解的方式被记录下来,因此,如果你想帮助 ol’Mozilla,这里有一些容易实现的成果。
JSON.stringify
我遇到了同样的问题,因为我的 json 数组 key-value 是 string-string。改变结构是不可能的。所以我通过将 json 数组转换为 它完全解决了我的问题。
将数组更改为对象:
var *your_object* = Object.assign({}, *your_array*);