python 2.7与json的套接字通信
我想通过套接字发送/接收数据 我使用Python2.7是因为ROS(melodic),也使用Python3.6是因为tensorflow dict数据,例如python 2.7与json的套接字通信,python,json,python-2.7,sockets,Python,Json,Python 2.7,Sockets,我想通过套接字发送/接收数据 我使用Python2.7是因为ROS(melodic),也使用Python3.6是因为tensorflow dict数据,例如{'key_name':[[1,2,3],[4,5,6]]},通过jsonecoder.encoder()发送和编码 客户端使用load()接收json数据并将其重新发送到服务器。 客户端使用Python2.7,服务器使用Python3.6 def _send(socket, send_data): json_data = json.
{'key_name':[[1,2,3],[4,5,6]]}
,通过jsonecoder.encoder()发送和编码
客户端使用load()
接收json数据并将其重新发送到服务器。
客户端使用Python2.7,服务器使用Python3.6
def _send(socket, send_data):
json_data = json.JSONEncoder().encode(send_data)
socket.sendall(json_data)
def _recv(socket):
recv_data = socket.recv(BUFSIZE)
json_data = json.loads(recv_data, encoding="utf-8")
return json_data
我有错误
File "/usr/lib/python3.6/json/deoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 4097 (char 4096)
我需要一个在Python2.7和3.6上运行的python代码。错误来自json解码器
json_data = json.loads(recv_data, encoding="utf-8"),
当您的json数据(在您的示例中是recv_data
)格式不正确时,会出现这种情况。通常缺少逗号“,”之类的。
对于调试,我建议您先转储服务器上接收的数据,然后再使用json.loads()
如何知道响应只有4096字节?这个答案似乎证实了@user207421的建议。您应该检查json输出,并确保不会因为BUFSIZE太小而切断任何数据。您说的没错。我认为它可能不是格式错误的json,而是BUFSIZE
不够大。@Simon是的。转储输出是确认我已经厌倦了你的答案的方法,但它对我不起作用。所以我改了库msgpack。我觉得不错。非常感谢。