2016-03-02 253 views
2

我建設有龍捲風的WebSocket和龍捲風的WebSocket網站接受這種類型的JSON:轉換的javascript JSON對象字符串

{"key1":1,"key2":2,"key3":3} 

我想papulate在JSON元素屬性,並將其發送給WebSocket的。我的javascript:

 $(".send").click(function(evt){ 
       evt.preventDefault(); 

       var command = $(this).data(); 
       console.log(command); 
       ws.send(command); 
     }); 

命令是JSON,但我的WebSocket不接受它,並拋出錯誤,當我嘗試

#python 
json_data = json.loads(message) 

錯誤:

03-02 18:09 tornado.application ERROR Uncaught exception in /ws 
Traceback (most recent call last): 
File "/usr/local/lib/python2.7/dist-packages/tornado/websocket.py", line 417, in _run_callback 
callback(*args, **kwargs) 
File "/var/www/scripts/py/realtime.py", line 102, in on_message 
kk = json.loads(message) 
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads 
return _default_decoder.decode(s) 
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode 
obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode 
raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 

我想這是因爲我不需要發送一個json對象,只需要一個像這樣的語法的字符串?也許我錯了,我不知道。我可以將我的$(this).data(); json轉換成上面的語法嗎?還是從$(this).data();生成一個字符串會更好?如果是,怎麼辦?

+1

當不帶參數調用['.data()'](http://api.jquery.com/data/)時,它會返回一個包含所有'data- *'屬性的對象。而一個對象不是JSON。 – Andreas

+0

你可以'JSON.stringify'嗎? –

+0

*「command is json」* ....不,它不是。你混淆了JavaScript對象和JSON是 – charlietfl

回答

1

@Duncan Tidd是對的。我只是需要把它串起來。

//html 
    <button key1="1" 
     data-key2="2" 
     data-key3="3" 
     data-key4="4" 
    type="button" 
    class="send btn btn-danger btn-lg"> 
    <span class="glyphicon glyphicon-off"></span></button> 

    //javascript 
    $(".send").click(function(evt){ 
       evt.preventDefault(); 

       var command = JSON.stringify($(this).data()); 
       console.log(command); 
       ws.send(command); 
     }); 


//console 
{"key1":"1","key2":2,"key3":3,"key4":4}