2012-01-14 14 views
4

私はsocket.ioバージョン0.8.4を使用します。node.jsとsocket.ioに配列を送信するときのバグ

私は以下に私の問題を煮詰めました。私は、データは次のように探しています

data.prop1 = []; 
data.prop1.push("man"); 
data.prop2 = []; 
data.prop2["hey"] = "man"; 

私はクライアントにこの方法をサーバーからのデータを送信します。

クライアント側で
socket.emit("data", data); 

私はこの方法データを受け取る:

socket.on("data", function(data){ console.log(data); }); 

奇妙なことがある:

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. 

data.prop2は、クライアント側の空の配列に過ぎません。

propsonのフォームに配列をシリアライズするjsonには既知のバグはありますか?

はいこの回避策を使用して解決:

EDITは

ありがとう事前に残念ながら

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

答えて

6

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" 
+0

ありがとうございます!その後、それはうまく動作します:) –

1

、Javascriptが実際にそのように動作しません。

this articleを半分ほど確認してください。これは、data.prop2 ["hey"] = "man"を設定しようとするときの問題を説明しています。

関連する問題