2014-11-01 52 views
0

我有一個奇怪的問題沒有JSON對象可以解碼。有效的JSON

我有一個計劃,通過套接字發送一個JSON字符串:

json_string = JSONEncoder().encode({ 
    "id_movil": str(id_movil), 
    "correo": "[email protected]" 
}) 

socket_client.sendall(json_string) 

在服務器上,我有:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host, port)) 
s.listen(1) 
conn, addr = s.accept() 
buffer_json = conn.recv(1024) 
data = json.loads(buffer_json) 

然後,一個異常拋出:

Traceback (most recent call last): 

    data = json.loads(buffer_json) 
    File "/usr/lib/python2.7/json/__init__.py", line 326, 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 

當我更改「correo 「在json從"[email protected]"[email protected]或任何其他字符串異常不再拋出。

PS。只有在使用套接字時才拋出異常。當我在Python shell上使用json.loads時,它的工作原理是

+0

'conn.recv'返回的數據與傳遞給'socket_client.sendall'的數據相同嗎?你檢查了嗎? – jwodder 2014-11-01 02:16:17

+0

是的,是一樣的。爲了準確,這個:{「correo」:「[email protected]」,「id_movil」:「15」} – imarban 2014-11-01 02:18:29

回答

0

嗯,我沒有看到你發佈的代碼部分有什麼問題,所以我冒昧地重新創建缺少的比特,因爲我認爲它們是合適的。

服務器:

import json 
import socket 

host, port = "127.0.0.1", 9696 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.bind((host, port)) 
s.listen(1) 
conn, addr = s.accept() 
buffer_json = conn.recv(1024) 
data = json.loads(buffer_json) 
print(data) 

客戶:

import json 
import socket 

id_movil = 5 

json_string = json.JSONEncoder().encode({ 
    "id_movil": str(id_movil), 
     "correo": "[email protected]" 
     }) 

socket_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
socket_client.connect(("127.0.0.1",9696)) 
socket_client.sendall(json_string) 

當我運行它,它運行得很好。所以你的問題要麼是網絡分割數據,所以它不會一次性完成(不太可能考慮到數據的大小,但可能),或者你沒有向我們展示的代碼段。 如果它是前者,那麼你將不得不循環conn.recv()直到所有的數據都通過。

+0

但是,如果是網絡分割數據,那麼把一個更大的字符串不應該來一氣呵成,發生了。 – imarban 2014-11-01 02:35:22

+0

@imarban然後,錯誤是在你決定不與我們分享的代碼中。 – 2014-11-01 02:36:10

+0

此外,我收到了我發送的 – imarban 2014-11-01 02:36:24

相關問題