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)
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)