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. ElasticSearch降本增效常见的方法 | 京东云技术团队

    Elasticsearch在db_ranking 的排名不断上升,其在存储领域已经蔚然成风且占有非常重要的地位. 随着Elasticsearch越来越受欢迎,企业花费在ES建设上的成本自然也不少.那如 ...

  2. 【AIGC】只要10秒,AI生成IP海报,解放双手!!!

    看完这篇文章,你将学会以下价值连城的内容 1.云端部署(配置不行的小伙伴看)+ 云端模型放置位置 2.本地部署(配置达标的小伙伴看) 3.运用SD训练IP的流程和技巧(LoRA篇) 4.运用SD稳定生 ...

  3. TS声明promise返回来的数据类型

    promise返回来的数据类型 interface backResult{ code: number, data: { name:string,age:number}[], //数组里面的对象类型,这 ...

  4. 【JS 逆向百例】某空气质量监测平台无限 debugger 以及数据动态加密

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...

  5. 分页sql大全

    一.排除Top分页法(自命名,非规范) 思想:所谓"排除Top分页",主要依靠"排除"和Top这个两大核心步骤.首先查询当前页码之前的数据,然后将该数据从总数据 ...

  6. github clone或访问慢

    做技术的我们经常会访问github.com,有时出现github访问非常慢或者git clone速度很慢,git push也很慢 原因很简单:github被高高的墙屏蔽了. 所以解决方案就是手动把 c ...

  7. vim 从嫌弃到依赖(20)——global 命令

    在前面的文章中,我们介绍了如何进行查找和替换,而替换是建立在查找基础之上的一个简单的应用,它只是将匹配文本修改为另一个.那么vim中还能针对匹配上的文本做哪些操作呢?在本篇文章中我们来对这个问题进行探 ...

  8. SqlSugar常见问题汇总

    1.已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭. There is already an open DataReader associated with this ...

  9. Axure谷歌浏览器扩展程序下载及安装方法(免FQ)

    在用Axure在chrome查看原型时,没有安装Axure谷歌浏览器插件时无法显示会有提示信息,如果未FQ按照提示是无法直接安装扩展程序的,这里提供插件下载地址并教大家如何安装插件. 平时在使用谷歌浏 ...

  10. P9816 少项式复合幂 题解

    题目链接:少项式复合幂 注意到题目的模并不是很大,我们考虑两个核心的性质. \(f(f(x)) \bmod p=f(f(x) \bmod p) \bmod p\),证明直接代入 \(f(x)\) 进去 ...