字符串化将忽略数组中的某些值

时间:2013-12-11 19:41:57

标签: javascript php arrays json object

阵列看起来像这样:

["1", "2", R: "aviv", remove: function]
0: "1"
1: "2"
R: "Test"
length: 2
__proto__: Array[0]

当我对这个数组使用JSON.stringify()时,我得到:

["1","2"]

这因为数组长度是2,我该如何解决呢? 我需要使用这个数组将ajax发布到php脚本中,并且我丢失了一些nesesarry数据。

谢谢你, 特拉维夫

1 个答案:

答案 0 :(得分:2)

["1", "2", R: "aviv", remove: function]不代表数组 - 它的语法无效。

无论如何,假设代码是为了描绘一个创建为:

的数组
arr = ["1", "2"]
arr.R = "aviv"
arr.remove = function () {}

然后 Rremove属性都不能用JSON.stringify序列化,因为它将数组映射到JSON-Array。

虽然[JavaScript] Arrays是Objects的特化 - 特别是它们支持“expando属性”,但JSON-Arrays和JSON-Objects是 distinct 数据类型。

因为这样的JSON-Arrays有无法映射键,并且不映射其他属性:实际的实现将迭代数组索引[0,arr.length) as它将Array映射到JSON-Array。

要将额外的键映射为JSON-Object, start 使用[JavaScript]对象(不是数组),它将映射到JSON-Object:

notArray = { 0: "1", 1: "2", R: "aviv", remove: function () {} }

当然,也许JSON应该有更深层的结构:牢记映射规则。


以下是两种情况的示例输出(请注意function未映射):

JSON.stringify(arr)       // -> ["1","2"]
JSON.stringify(notArray)  // -> {"0":"1","1":"2","R":"aviv"}