无法解码 JSON 对象。有效的 JSON

0 投票
1 回答
1126 浏览
提问于 2025-04-30 23:44

我遇到了一个奇怪的问题

我有一个程序,它通过一个套接字发送一个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 或其他任何字符串时,异常就不再出现了。

附注:这个异常只在我使用套接字的时候出现。当我在python命令行中使用 json.loads 时,它是可以正常工作的。

暂无标签

1 个回答

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() 里循环,直到所有数据都传输完毕。

撰写回答