json传输二进制的方案(python版)

1.json不能直接传二进制文件

json只能传递基本的数型(如:int,long,string等),但不能传递byte类型。但是有时候我们想在json中传送一些二进制文件,如:图片等,是没办法直接传输。

再给出解决方案前补充一下编码和解码的知识:

  • 编码:将信息从一种形式或格式转换为另一种形式的过程,如:(生活中的字符串转计算机的存储字节,一种不可字符化的字节转另一用可字符化的字节)
  • 解码:编码的逆向形式。

2.思路

  • 我们要通过一些办法将二进制文件转成字符串供给json传输,然后在服务端再将字符串转为二进制文件。
  • 但是二进制文件无法直接转化为可打印的字符串(因为编码方式不允许),这时我们需要对二进制文件做一个转化,将文件的二进制序列转化为一种能被转为字符串的二进制序列,然后再转化为字符串。
  • 文件(不可直接转字符串)----->编码后的二进制序列(可字符串化)----->字符串----->json传输

思路步骤如下:

  1. 读取二进制文件(A)
  2. 使用base64编码文件的二进制序列(A),编码后的二进制序列(B)转化为可打印的文本编码
  3. 将编码后的二进制序列(B)转化为字符串
  4. 使用json传输经过转换后的字符串
  5. 在服务端将字符串重新转化为二进制序列(B)
  6. 然后再通过base64解码成原二进制序列(A)

3.base64

base64有以下这些作用

a)所有的二进制文件,都可以因此转化为可打印的文本编码,使用文本软件进行编辑;

b)能够对文本进行简单的加密。

操作步骤如下:

base64编码
with open(imgname, 'rb') as img:
    #读取二进制序列
    data = img.read()
    #b64编码,生成新的可字符化的二进制序列
    bast64_data = base64.b64encode(data)
    #字符串化,使用utf-8的方式解析二进制
    bast64_str = str(bast64_e,'utf-8')
    #json传递
    ......
base64解码
#将字符串重新编码为utf-8的二进制序列(该序列被b64编码过)
bast64_data = bast64_str.encode(encoding='utf-8')
#b64解码,获得原二进制序列
data = base64.b64decode(bast64_data)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐