1.今天在写客户端与服务端交互的程序的时候,发现了一个问题

客户端代码

#客户端程序主要是发送注册请求/登录请求给服务端,服务端接收响应后回应对应的应答给客户端,客户端接收响应后,然后做一些操作

# ### 客户端
import socket
import hashlib
import json def register(sk):
name = input('请输入注册用户名')
pwd = input("请输入注册密码")
pwd2 = input("请再次输入注册密码")
dic = {'username':name,'password':pwd,'password2':pwd,'status':1}
sk.send(json.dumps(dic).encode())
res = sk.recv(1024)
return res def login(sk):
name = input('请输入账户')
pwd = input('请输入密码')
hs = hashlib.md5()
hs.update(pwd.encode())
res = hs.hexdigest()
dic = {'username': name, 'password': res, 'password2': res, 'status': 2}
#发送数据
sk.send(json.dumps(dic).encode())
res = sk.recv(1024)
return res
#1.创建对象
sk = socket.socket() #2.创建连接
sk.connect(('127.0.0.1',9001)) #.接收发数据
num = input('请输入注册1,登陆2')
if num == '1':
res = register(sk)
print(res.decode())
elif num == '2':
res = login(sk)
print(res.decode())
else:
print("输入有误请重新输入") #断开连接
sk.close()

服务端代码

# ### 服务端
import hashlib
import json
import socketserver
import os class MyServer(socketserver.BaseRequestHandler):
def handle(self):
conn = self.request
while True:
msg = conn.recv(1024)#接收的是字节流
strvar = msg.decode() #转换为字符串
print(strvar)
json.loads(strvar) #反序列化成字典
print(json)
# if not msg:break #先把这段话去掉
if json.loads(msg.decode())['status'] == 1:
with open('mysql.json','r+',encoding='utf-8') as fp:
if not os.path.getsize('mysql.json'):
hs = hashlib.md5()
hs.update(json.loads(msg.decode())['password'].encode())
hs_res = hs.hexdigest()
dic = {"username": json.loads(msg.decode())['username'], "password": hs_res}
json.dump(dic, fp)
fp.write('\n')
print('注册成功')
conn.send('注册成功'.encode())
break
else:
for i in fp:
dic_res = json.loads(i)
if dic_res["username"] == json.loads(msg.decode())['username']:
print('用户名已注册')
conn.send("用户名已注册".encode())
break
elif json.loads(msg.decode())['username'] not in dic_res["username"]:
hs = hashlib.md5()
hs.update(json.loads(msg.decode())['password'].encode())
hs_res = hs.hexdigest()
dic = {"username":json.loads(msg.decode())['username'],"password":hs_res}
json.dump(dic,fp)
fp.write('\n')
print('注册成功')
conn.send('注册成功'.encode())
break
elif json.loads(msg.decode())['status'] == 2:
with open('mysql.json', 'r', encoding='utf-8') as fp:
for i in fp:
dic_res = json.loads(i)
if dic_res["username"] == json.loads(msg.decode())['username'] and dic_res["password"] == json.loads(msg.decode())['password']:
print('账户密码正确,登录成功')
conn.send('账户密码正确,登录成功'.encode())
break
else:
print('账户或密码错误')
conn.send('账户或密码错误'.encode())
break server = socketserver.ThreadingTCPServer(('127.0.0.1',9001),MyServer)
server.serve_forever()

问题主要出现在客户端发送请求给服务端的时候,服务端报了个json.decoder.JSONDecodeError的问题,但是客户端最后运行的结果显示是正确的

下面是服务端报的错误

 首先我在客户端找了下,发送的数据是没有问题的

 然后去服务端在接收字节流的时候发现出现了问题

 然而在打印屏幕上服务端显示的却是这样,多了次接收并打印,很显然是又传了一次空的字节过来,然后在网上找了一下解决办法,都没有相关的解决办法,都说是跟单引号双引号的关系,然而并不是,最后我想了个办法,它这边会多传一个空字节过来,我服务端接收的时候,加了个判断,if not msg:break ,然后把前面的打印全删了,只留一个msg来接收客户端传过来的字节, 然后再运行的时候,服务端就没有这种JsonDecondeError的问题了

关于json序列化时报错json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)的更多相关文章

  1. json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

    1.json模块常用的四个函数 import json json.load() # 将一个存储在文件中的json对象(str)转化为相对应的python对象 json.loads() # 将一个jso ...

  2. 记录一个奇葩 bug [Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)]

    关于 flask 的一个记录 代码 @auth.login_required @app.route('/add', methods=['POST']) def add(): if request.me ...

  3. pandas处理json脱坑(二)--jsonError: Expecting ',' delimiter: line 1 column 2674

    Expecting ',' delimiter: line 1 column 2674 json_dict = json.loads(row[json_columns].replace("' ...

  4. Django开发之Datetime类型JSON序列化时报错

    前提回顾 在进行django开发view视图时,如果数据库字段是 datetime类型,在JSON序列化返回时,会出现异常 异常现象 TypeError: Object of type datetim ...

  5. Django 之swagger中尝试调试post请求时返回 "detail": "JSON parse error - Expecting value: line 1 column 1 (char)

    swagger已配置OK,但发送POST请求时一直显示数据格式错误,怪异.... 经过各种查找资料,才发现setting.py文件中缺少配置 配置完成后重启服务,再次尝试发送POST请求,不会再报格式 ...

  6. python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决

    在学习python语言中用json库解析网络数据时,我遇到了两个编译错误:json.decoder.JSONDecodeError: Expecting property name enclosed ...

  7. 【JSON】Python读取JSON文件报错json.decoder.JSONDecodeError的问题

    报错 json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line * column * ...

  8. json.loads 报错 json.decoder.JSONDecodeError

    json.loads报json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes 出现这个错误其实只 ...

  9. python:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes问题解决

    有如下一个文件,内容如下 { "test1": "/root/test/test1.template", "test2": "/r ...

  10. 将具有关联关系的两个表从hibernate查询出来转成json对象时报错

    第一篇文章: 相信大家做过JSON相关的东西对这个异常并不陌生,这个异常是由于JSONObject插件内部会无限拆解你传入的对象,直到没有可拆解为止,问题就在这,如果你传入的对象有外键关系,或者相互引 ...

随机推荐

  1. 【转帖】Alpaca 7B:斯坦福从LLaMA-7B微调的语言模型

    https://www.jianshu.com/p/f8f8f660d2c3 https://crfm.stanford.edu/2023/03/13/alpaca.html https://crfm ...

  2. [转帖]细说Redis监控和告警

    https://blog.csdn.net/sD7O95O/article/details/78096956 对于任何应用服务和组件,都需要一套完善可靠谱监控方案.尤其redis这类敏感的纯内存.高并 ...

  3. [转帖]egrep及扩展的正则表达式

    egrep: egrep = grep -E 语法:egrep [选项] PATTERN [FILE...] 扩展正则表达式的元字符: 字符匹配: .:匹配任意单个字符: [ ]:匹配指定范围内的任意 ...

  4. [转帖]CPU Utilization is Wrong

    Brendan Gregg's Blog home CPU Utilization is Wrong 09 May 2017 The metric we all use for CPU utiliza ...

  5. ES客户端spring-boot-starter-data-elasticsearch

    ES客户端分类 Es-Server提供RESTFul-Api,客户端通过发起http请求,调用api实现索引库的管理,数据的交换,server端状态的监控...... 官方java客户端: <d ...

  6. 你不知道的Promise状态变化机制

    1.Promise中PromiseStatus的三种状态 var p = new Promise((resolve, reject) => { // resolve 既是函数也是参数,它用于处理 ...

  7. 【学到了】golang的[]byte可以append string类型的数据

    上代码: func Test_use_string(t *testing.T){ arr := make([]byte,0, 100) arr = append(arr, "abcd&quo ...

  8. 英特尔发布酷睿Ultra移动处理器:Intel 4制程工艺、AI性能飙升

    英特尔今日发布了第一代酷睿Ultra移动处理器,是首款基于Intel 4制程工艺打造的处理器. 据了解,英特尔酷睿Ultra采用了英特尔首个用于客户端的片上AI加速器"神经网络处理单元(NP ...

  9. 使用私有gitlab搭建gitbook持续集成

    目录 环境搭建 1. 安装 Node.js 2. 安装 gitbook 3. 安装 Gitlab Runner 4. 注册Runner gitbook 配置 1. 目录结构 2. 命令行 3. 插件 ...

  10. Git Q&A

    git入门 Q: 什么是git ? A: git是一种版本控制工具,也是程序员的"后悔药":当你在工程中写入一堆混乱的代码后,只要通过几行简单的git命令,就可以回退到任意一个提交 ...