javascript - JSON stringify 忽略数组中的某些值

标签 javascript php arrays json object

数组看起来像这样:

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

When I Use JSON.stringify() for this array i get:

["1","2"]

这是因为数组长度为2,请问如何解决? 我需要使用这个数组将 ajax post 放入 php 脚本中,并且我丢失了一些 nesesarry 数据。

谢谢你, 阿维夫

最佳答案

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

无论如何,假设代码旨在将创建的数组描绘为:

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

然后 Rremove属性将使用 JSON.stringify 进行序列化,因为它将数组映射到 JSON 数组。

虽然 [JavaScript] 数组是对象的特化 - 特别是它们支持“expando 属性”,但 JSON 数组和 JSON 对象是不同的数据类型。

因此,JSON 数组无法映射键,并且不会映射其他属性:实际实现将迭代数组索引 [0,arr.length)因为它将数组映射到 JSON 数组。

要将额外的键映射为 JSON 对象,请从将映射到 JSON 对象的 [JavaScript] 对象(而不是数组)开始:

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"}

关于javascript - JSON stringify 忽略数组中的某些值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20528458/

相关文章:

javascript - Angular ui路由器 - 重定向根本不起作用

php - 如何将表字段映射到学说实体中不同名称的变量?

C++ 可变参数模板数组/访问元素

c++ - 如何在这个 c++ 数据结构中处理快速插入-删除操作?

javascript - 如何根据用户输入过滤 Angular View 中的数据?

javascript - JavaScript 中的 Ajax POST 不起作用

javascript - 检查值是否是对象文字?

javascript - 从 Backbone.js 中的非 JSON 服务器响应创建模型实例

php - 基于 cookie 的 WordPress 重定向

php - 解析 HTML 中的多个 PHP 代码块