Stringify return []

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

[]

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

是什么引起的?我传入了一个简单的对象数组,其中每个对象都具有字符串属性。我已经循环遍历并警告了每个对象属性,一切看起来都很好,但是由于某种原因,两个 encode 方法都返回 []

58756 次浏览

在数组声明中

var count_review= new Array()

而不是这样使用

var count_review={};

成功了!

如果数组使用的是 string键值,而不是 int,则字符串化忽略该值。

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

但是如果 array 使用“ int”作为键,那么 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网站的顶部(下面的一些重点是我的) :

JSON 基于两种结构:

  • 名称/值对的集合。在各种语言中,这被实现为 对象记录结构字典哈希表键控列表关联数组
  • 值的一个 订购清单。在大多数语言中,这是以 < strong > array 矢量名单序列的形式实现的。

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

在 JSON,它们采取以下形式:

对象是名称/值对的 无序集合。对象以 {(左大括号)开始,以 }(右大括号)结束。每个名称后面跟着 :(冒号) ,名称/值对用 ,(逗号)分隔。

JSON Object definition graph

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

JSON Array definition graph

JSON.stringify函数以这样的方式处理这个问题: 假设数组是一个数组,并且所有键控条目都是注释性的,就像函数对象的元素一样,它们只是从它返回的 JSON 表示中被抛出。不幸的是,在非官方的 JavaScript 引用 MDN(2017-09-04)中,这种行为并没有以一种定义明确、易于理解的方式被记录下来,因此,如果你想帮助 ol’Mozilla,这里有一些容易实现的成果。

我遇到了同样的问题,因为我的 json 数组 key-value 是 string-string。改变结构是不可能的。所以我通过将 json 数组转换为 它完全解决了我的问题。

将数组更改为对象:

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