Не удается загрузить сообщение типа JSON в клиент - PullRequest
0 голосов
/ 17 мая 2019

Я не могу загрузить сообщение типа JSON со словарем внутри, когда клиент получает его с сервера.

Словарь содержит: сообщение, адрес отправителя, время отправки. Когда я отправляю словарь в JSON и отправляю его клиенту,клиент пытается загрузить этот dict, поэтому он не может использовать данные из словаря с сервера и распечатывать их пользователю. Также, когда клиент отправляет сообщение, он может написать «/ r» для получения данных с сервера, это означает, что клиент может получать большие данные водин раз.Это только часть кода с отправкой и получением данных с сервера и клиента

SERVER

    def serialize_data(self, sending_time, message, address,):
        message_dict = {
            'sending_time': sending_time,
            'message': message,
            'sender_address': address
            }
        serialized_dict = dumps(message_dict)
        return serialized_dict

    def send_messages(self, data_dict, address):
        if enable_log:
            message = f'{self.get_time()}, {data_dict["message"]}, {address}'
            self.save_log(message, 'a')
        message = self.serialize_data(self.get_time(), data_dict['message'], address)
        for client in self.connections_list:
            message = dumps(message)
            client.sendall(bytes(message, encoding='utf-8'))

CLIENT

    def receive_data(self,):
        while True:
            try:
                data = self.sock.recv(2048).decode('utf-8')
                print(data)
                data_dict = loads(data)
                for d in data_dict:
                    d = loads(d)
                    d = f"{d['sending_time']} {d['sender_address']} - {d['message']}"
                    print(d)
            except timeout:
                break

Я получаю это в клиенте, когда пытаюсьполучить данные с сервера:

"{\"sending_time\": \"2019-05-17 | 21:16:32 \", \"message\": \"connected!\", \"sender_address\": \"127.0.0.1\"}""{\"sending_time\": \"2019-05-17 | 21:16:33 \", \"message\": \"abcd\", \"sender_address\": \"127.0.0.1\"}"

1 Ответ

0 голосов
/ 17 мая 2019

Это потому, что вы дважды вызываете json.dumps ().

def serialize_data(self, sending_time, message, address,):
    message_dict = {
        'sending_time': sending_time,
        'message': message,
        'sender_address': address
        }
    serialized_dict = dumps(message_dict) # -------------> first time
    return serialized_dict


def send_messages(self, data_dict, address):
    if enable_log:
        message = f'{self.get_time()}, {data_dict["message"]}, {address}'
        self.save_log(message, 'a')
    message = self.serialize_data(self.get_time(), data_dict['message'], address)
    for client in self.connections_list:
        message = dumps(message)  # ------------------> Second time
        client.sendall(bytes(message, encoding='utf-8'))

Удаление одного из них должно исправить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...