2016-03-24 4 views
0

私はここに夢中になっているのかどうか分かりませんが、私はいつも簡単なことをしています。SocketIOはONからJSONプロパティにアクセスできない

私はそうのようなクライアントからのメッセージを受信して​​います:

  socket.on('request_username', function(messageFromClient) { 

      if(messageFromClient == undefined) { 
       Logger.logError("messageFromClient was undefined in socket_api.js"); 
       return; 
      } 

      // Parse the message into Json, might not be needed. 
      // Logs: "{\"username\":\"test\"}" 
      console.log(messageFromClient); 

      try { 
       messageFromClient = JSON.parse(messageFromClient); 
       //Logs: {"username":"test"} 
       console.log(messageFromClient); 
      } catch(err) { 
       console.log("Error parsing json from request_username. Mesage is %s", err); 
       return; 
      } 

     // All undefined. 
     console.log(messageFromClient['"username"']); 
     console.log(messageFromClient["username"]); 
     console.log(messageFromClient['username']); 

      // msg == undefined incase the parse failed. 
      if(messageFromClient == undefined || messageFromClient.username == undefined) { 
       Logger.logError("messageFromClient.username was undefined in socket_api.js"); 
       return; 
      } 

      var usernameRequested = messageFromClient.username; 

は今、私は

"{\"username\":\"test\"}" 
{"username":"test"} 
Log Error: messageFromClient.username was undefined in socket_api.js 

ログでこれを取得しています、私は私が間違ってやっているさっぱりだが..

+0

ES6を使用している場合は、lambdasを使用する必要があります。私はそれらのエスケープスラッシュがあなたの問題だと思う。あなたが 'messageFromClient ['" username "']'をキーとして受け取ったときに 'messageFromClient.username'を探しています –

+0

' '' {username: "test"} '' 'を渡してみたところ、壊れました。私はまだ同じエラーが発生します –

+0

あなたは 'messageFromClient = {username:" test "};'を試みましたが、まだ未定義でしたか? –

答えて

1

socket.ioを使用すると、自動的にJavascriptデータをJSONに/からシリアル化します。あなたはそれをする必要はありませんし、しようとすると、物事を混乱させることができます。 socket.ioで

、あなたがこのように送信することができます。

var data = {username: "test"}; 
socket.emit('request_username', data); 

を次に、受信側で、あなたが持っているでしょう:

socket.on('request_username', function(data) { 
    console.log(data.username); // will show "test" 
}); 

シリアライズに/ JSONからはによって自動的に行われますsocket.ioライブラリ(その多くの便利な機能の1つ)


さらに、あなたの特定の状況をデバッグするために、我々はあなたがそれに何かをやった前にメッセージが最初に到着したときに、非常に最初のconsole.log(messageFromClient)が右示し正確に把握する必要があるでしょうか?

ログ情報を表示しますが、どのデバッグ行がどのコード行に対応しているかは完全にはわかりません。その一番最初にconsole.logが表示されている場合:

"{\"username\":\"test\"}" 

を、あなたのメッセージは、それが二重にJSONは送信側のエラーであるエンコードされたので、おそらくしている、まだ明らかにJSONです。これは、それを二重解析しようとするのではなく、送信側で修正する必要があります。


この問題については、JSONが文字列形式であることに注意してください。 Javascriptオブジェクトは、Javascriptコードで直接プロパティにアクセスできるものです。あなたは時に両方をJSONと呼びますが、これはすべてを混乱させるものです。あなたはvar jsonStr = JSON.stringify(obj)でJSONにJavascriptオブジェクトを変換し、var obj = JSON.parse(someJSON)でJSONをJavascriptオブジェクトに変換します。

var obj = {username: test};   // Javascript object 
var jsonStr = JSON.stringify(obj); // produces a JSON string 
var obj2 = JSON.parse(jsonStr);  // parses JSON string back to a Javascript object 
+0

'' 'undefined'''がコンソールに表示されます。私が送信しているJSONは '' '{" username ":" test "}' '' –

+0

です。@iLoveUnicorns - 私は答えの最後にさらに追加しました。 – jfriend00

+0

私はまだこのエラーが発生しています。おそらくSocket.ioテスターが奇妙な文字を送信していますか?私はソケットを簡単にテストできる他の方法を知っていますか? –

関連する問題