没有JSON对象可以解码。有效的JSON
问题描述:
我有一个奇怪的问题没有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
时,它的工作原理是
答
嗯,我没有看到你发布的代码部分有什么问题,所以我冒昧地重新创建缺少的比特,因为我认为它们是合适的。
服务器:
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()直到所有的数据都通过。
'conn.recv'返回的数据与传递给'socket_client.sendall'的数据相同吗?你检查了吗? – jwodder 2014-11-01 02:16:17
是的,是一样的。为了准确,这个:{“correo”:“[email protected]”,“id_movil”:“15”} – imarban 2014-11-01 02:18:29