python 2,7 гнездо связи с json - PullRequest
2 голосов
/ 03 апреля 2020

Я хочу отправлять / получать данные через сокет.

Я использую python 2.7 из-за ROS (мелодия c), а также python 3.6 из-за тензорного потока.

Данные dict, например {'key_name':[[1,2,3],[4,5,6]]}, отправляются и кодируются с помощью JSONEncoder.encoder().
Клиент получил данные json с loads() и отправил их на сервер.
Клиент использует python 2.7 и Сервер использует python 3.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)

Мне нужен код python, который работает на python 2.7 и 3.6.

1 Ответ

3 голосов
/ 03 апреля 2020

Ошибка исходит от json декодера.

json_data = json.loads(recv_data, encoding="utf-8"),

Ожидается, когда ваши json данные (в вашем случае recv_data) имеют неправильный формат. Обычно пропускается запятая, или что-то. Для отладки я бы предложил вам сбросить данные, полученные на сервере, перед тем как перейти к json.loads()

...