在node.js和socket.io中发送数组时出错

Ste*_*yer 5 arrays serialization node.js socket.io

我使用socket.io版本0.8.4

我把我的问题归结为以下问题.我的数据看起来像这样:

data.prop1 = [];
data.prop1.push("man");
data.prop2 = [];
data.prop2["hey"] = "man";
Run Code Online (Sandbox Code Playgroud)

我以这种方式将数据从服务器发送到客户端:

socket.emit("data", data);
Run Code Online (Sandbox Code Playgroud)

在客户端,我以这种方式接收数据:

socket.on("data", function(data){ console.log(data); });
Run Code Online (Sandbox Code Playgroud)

奇怪的是:

data.prop1 = [];
data.prop1.push("man"); // This data exists in the client side data object
data.prop2 = [];
data.prop2["hey"] = "man"; // This data does not exist.
Run Code Online (Sandbox Code Playgroud)

data.prop2只是客户端的一个空数组.

在prop2中的表单上json序列化数组是否存在已知错误?

先感谢您

编辑:

使用此变通方法解决了问题:

data.prop1 = [];
data.prop1.push("man");
data.prop2 = {}; // <= Object instead of array
data.prop2["hey"] = "man";
Run Code Online (Sandbox Code Playgroud)

Fel*_*her 7

ECMA-262关于JSON.stringify:

数组的表示仅包括零和array.length – 1包含之间的元素.命名属性将从字符串化中排除.

数组应该具有数字属性名称.因此,当data.prop2转换为JSON(socket.io发送数据时,我想),它不会获得'hey'属性.如果要使用非数字属性名称,则应使用对象而不是数组:

data.prop1 = [];
data.prop1.push("man");
data.prop2 = {}; // Notice we're creating an object, not an array.
data.prop2["hey"] = "man"; // Alternatively: data.prop2.hey = "man"
Run Code Online (Sandbox Code Playgroud)