def recv(): global users, friends while True: # 消息主循环 data = s.recv(1024) data = data.decode() msg = data.split(':;') if len(msg) == 1: # 是用户列表消息 try: data = json.loads(data) # 还原为列表对象 print(data) if data["type"] == "online_list": # 在线列表消息 users = data["data"] online_list.delete(0,tkinter.END) # 清空列表框 number = ' 在线用户:'+str(len(users)) online_list.insert(tkinter.END, number) online_list.itemconfig(tkinter.END, fg='green', bg='#f0f0ff') online_list.insert(tkinter.END, '===== 群聊 =====') online_list.insert(tkinter.END, 'Robot') online_list.itemconfig(tkinter.END, fg='green') for i in range(len(users)): online_list.insert(tkinter.END, users[i]) online_list.itemconfig(tkinter.END, fg='green') elif data["type"] == "friend_list": friends = data["data"] friend_list.delete(0, tkinter.END) # 清空好友列表框 number = ' 用户好友:' + str(len(friends)) friend_list.insert(tkinter.END, number) friend_list.itemconfig(tkinter.END, fg='green', bg='#f0f0ff') for i in range(len(friends)): friend_list.insert(tkinter.END, friends[i]) friend_list.itemconfig(tkinter.END, fg='green') except json.decoder.JSONDecodeError as e: print("Error occurred while parsing data: ", e) 错误:Error occurred while parsing data: Extra data: line 1 column 44 (char 43) 请修改代码
时间: 2024-02-03 12:02:36 浏览: 140
根据错误提示,data 可能存在额外的数据,导致解析失败。可以尝试使用正则表达式去掉多余的数据,如下所示:
```
import re
def recv():
global users, friends
while True:
# 消息主循环
data = s.recv(1024)
data = data.decode()
msg = data.split(':;')
if len(msg) == 1:
try:
# 是用户列表消息
data = re.sub(r'}.*', '}', data) # 去掉多余的数据
data = json.loads(data)
# 还原为列表对象
print(data)
if data["type"] == "online_list":
# 在线列表消息
users = data["data"]
online_list.delete(0,tkinter.END)
# 清空列表框
number = ' 在线用户:'+str(len(users))
online_list.insert(tkinter.END, number)
online_list.itemconfig(tkinter.END, fg='green', bg='#f0f0ff')
online_list.insert(tkinter.END, '===== 群聊 =====')
online_list.insert(tkinter.END, 'Robot')
online_list.itemconfig(tkinter.END, fg='green')
for i in range(len(users)):
online_list.insert(tkinter.END, users[i])
online_list.itemconfig(tkinter.END, fg='green')
elif data["type"] == "friend_list":
friends = data["data"]
friend_list.delete(0, tkinter.END)
# 清空好友列表框
number = ' 用户好友:' + str(len(friends))
friend_list.insert(tkinter.END, number)
friend_list.itemconfig(tkinter.END, fg='green', bg='#f0f0ff')
for i in range(len(friends)):
friend_list.insert(tkinter.END, friends[i])
friend_list.itemconfig(tkinter.END, fg='green')
except json.decoder.JSONDecodeError as e:
print("Error occurred while parsing data: ", e)
```
这里使用了 re.sub() 方法去掉 data 字符串中的多余数据,即将最后一个 } 后面的数据全部替换为 },从而保证 data 是一个完整的 json 字符串。
阅读全文