关于json序列化时报错json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
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)的更多相关文章
- json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
1.json模块常用的四个函数 import json json.load() # 将一个存储在文件中的json对象(str)转化为相对应的python对象 json.loads() # 将一个jso ...
- 记录一个奇葩 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 ...
- pandas处理json脱坑(二)--jsonError: Expecting ',' delimiter: line 1 column 2674
Expecting ',' delimiter: line 1 column 2674 json_dict = json.loads(row[json_columns].replace("' ...
- Django开发之Datetime类型JSON序列化时报错
前提回顾 在进行django开发view视图时,如果数据库字段是 datetime类型,在JSON序列化返回时,会出现异常 异常现象 TypeError: Object of type datetim ...
- Django 之swagger中尝试调试post请求时返回 "detail": "JSON parse error - Expecting value: line 1 column 1 (char)
swagger已配置OK,但发送POST请求时一直显示数据格式错误,怪异.... 经过各种查找资料,才发现setting.py文件中缺少配置 配置完成后重启服务,再次尝试发送POST请求,不会再报格式 ...
- python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
在学习python语言中用json库解析网络数据时,我遇到了两个编译错误:json.decoder.JSONDecodeError: Expecting property name enclosed ...
- 【JSON】Python读取JSON文件报错json.decoder.JSONDecodeError的问题
报错 json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line * column * ...
- json.loads 报错 json.decoder.JSONDecodeError
json.loads报json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes 出现这个错误其实只 ...
- python:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes问题解决
有如下一个文件,内容如下 { "test1": "/root/test/test1.template", "test2": "/r ...
- 将具有关联关系的两个表从hibernate查询出来转成json对象时报错
第一篇文章: 相信大家做过JSON相关的东西对这个异常并不陌生,这个异常是由于JSONObject插件内部会无限拆解你传入的对象,直到没有可拆解为止,问题就在这,如果你传入的对象有外键关系,或者相互引 ...
随机推荐
- 【转帖】Alpaca 7B:斯坦福从LLaMA-7B微调的语言模型
https://www.jianshu.com/p/f8f8f660d2c3 https://crfm.stanford.edu/2023/03/13/alpaca.html https://crfm ...
- [转帖]细说Redis监控和告警
https://blog.csdn.net/sD7O95O/article/details/78096956 对于任何应用服务和组件,都需要一套完善可靠谱监控方案.尤其redis这类敏感的纯内存.高并 ...
- [转帖]egrep及扩展的正则表达式
egrep: egrep = grep -E 语法:egrep [选项] PATTERN [FILE...] 扩展正则表达式的元字符: 字符匹配: .:匹配任意单个字符: [ ]:匹配指定范围内的任意 ...
- [转帖]CPU Utilization is Wrong
Brendan Gregg's Blog home CPU Utilization is Wrong 09 May 2017 The metric we all use for CPU utiliza ...
- ES客户端spring-boot-starter-data-elasticsearch
ES客户端分类 Es-Server提供RESTFul-Api,客户端通过发起http请求,调用api实现索引库的管理,数据的交换,server端状态的监控...... 官方java客户端: <d ...
- 你不知道的Promise状态变化机制
1.Promise中PromiseStatus的三种状态 var p = new Promise((resolve, reject) => { // resolve 既是函数也是参数,它用于处理 ...
- 【学到了】golang的[]byte可以append string类型的数据
上代码: func Test_use_string(t *testing.T){ arr := make([]byte,0, 100) arr = append(arr, "abcd&quo ...
- 英特尔发布酷睿Ultra移动处理器:Intel 4制程工艺、AI性能飙升
英特尔今日发布了第一代酷睿Ultra移动处理器,是首款基于Intel 4制程工艺打造的处理器. 据了解,英特尔酷睿Ultra采用了英特尔首个用于客户端的片上AI加速器"神经网络处理单元(NP ...
- 使用私有gitlab搭建gitbook持续集成
目录 环境搭建 1. 安装 Node.js 2. 安装 gitbook 3. 安装 Gitlab Runner 4. 注册Runner gitbook 配置 1. 目录结构 2. 命令行 3. 插件 ...
- Git Q&A
git入门 Q: 什么是git ? A: git是一种版本控制工具,也是程序员的"后悔药":当你在工程中写入一堆混乱的代码后,只要通过几行简单的git命令,就可以回退到任意一个提交 ...