Json网络通讯
Json数据通讯的实现
发送数据
使用json.dumps函数将字典型数据转化为json字符串,例子:
import json
# Python 字典
data = {
"name": "John",
"age": 30,
"city": "New York"
}
# 将 Python 字典转换为 JSON 字符串
json_str = json.dumps(data)
print(json_str)
然后使用TCP,UDP或者http协议把字符串发送出去:
sock.send(json_str)
接收数据
首先使用sock.recv(字节数)收到json形式的字符串,然后用json.loads函数把它转化为字典:
import json
# 定义一个 JSON 字符串
json_str = '{"name": "John", "age": 30, "city": "New York"}'
# 将 JSON 字符串解析为 Python 字典
data = json.loads(json_str)
print(data)
在数据流中拆分Json数据包
在基于tcp/udp的网络通讯的过程,经常会出现多个json数据包粘在一起的情况(俗称粘包),例如:
{“a”:1}{“a”:2}
这两个数据就粘在一起了。这样使用
json.loads函数读取这个字符串就会报错。解决方法是识别多个json中的特征
}{。并基于这个特征把粘在一起的json数据给做拆分。代码如下:
def SplitJsonStr(jsonStr):
'''
拆分粘包的json数据
:param jsonStr:
:return:
'''
ret=[]
while True:
index = jsonStr.find('}{')
if index != -1:
ret.append(jsonStr[0:index+1])
jsonStr=jsonStr[index+1:]
else:
#识别最后一个JSON数据包
if '{' in jsonStr:
ret.append(jsonStr)
return ret作者:admin 创建时间:2024-05-21 08:56
最后编辑:admin 更新时间:2024-07-17 11:01
最后编辑:admin 更新时间:2024-07-17 11:01