没有JSON对象可以解码。有效的Json

时间:2014-11-01 02:14:05

标签: python json sockets

我有一个奇怪的问题

我有一个程序通过套接字发送json字符串:

json_string = JSONEncoder().encode({
    "id_movil": str(id_movil),
    "correo": "is_gom@live.com.mx"
})

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

当我将json中的“correo”值从"is_gom@live.com.mx"更改为is_goma@live.com.mx或任何其他字符串时,不再抛出异常。

PS。仅在使用套接字时抛出异常。当我在python shell上使用json.loads时,它可以工作

1 个答案:

答案 0 :(得分: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": "is_gom@live.com.mx"
        })

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()直到所有数据都通过。