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