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)

json传输二进制的方案(python版)相关推荐

  1. json传输二进制的方案【转】

    本文转自:http://wiyi.org/binary-to-string.html json 是一种很简洁的协议,但可惜的是,它只能传递基本的数型(int,long,string等),但不能传递by ...

  2. python热度评价指标_文本相似性热度统计方案(python版)

    1. 场景描述 背景不写了,只谈技术,做的是文本相似性统计,因需要从文本描述性信息中分析同类信息,以便后续重点关注,数据量比较大,大概20多万,人工效率低,需要算法来实现. 根据需求要从不同维度进行统 ...

  3. python之simplejson,Python版的简单、 快速、 可扩展 JSON 编码器/解码器

    simplejson Python版的简单. 快速. 可扩展 JSON 编码器/解码器 编码基本的 Python 对象层次结构: import simplejson as jsonprint json ...

  4. Python csv、xlsx、json、二进制(MP3) 文件读写基本使用

    Python csv.xlsx.json.二进制(MP3) 文件读写基本使用 文章目录 Python csv.xlsx.json.二进制(MP3) 文件读写基本使用 前言 一.什么是文件读写? 二.文 ...

  5. 接口测试之主流协议测试合集(python版)

    http://t.csdn.cn/U4WHz 接口测试之主流协议测试合集(python版) 01 TCP/IP四层模型&OSI七层模型 02 IP协议 03 TCP协议 04 UDP协议 05 ...

  6. 【python版】leanCloud的使用

    [python版]leanCloud的使用 参考 数据存储方案 价格 Python SDK 安装指南 数据存储开发指南 · Python 文章目录 [python版]leanCloud的使用 通过凭证 ...

  7. 发明者本地回测平台python版[博]

    原创博客地址:发明者本地回测平台python版[博] 网页版策略开发问题 1,没有自动提示 2,tab自动4个空格,问题是编译器无法识别4个空格,只能再把自动填充4空格改成tab 另一方面,官方提供安 ...

  8. 部署Kubernetes集群(二进制 v1.18.8版)

    第一章 kubernetes 功能介绍 · kubernetes 从入门到实践 · 看云 二进制 部署Kubernetes集群 组件版本 组件 版本 二进制包下载地址 备注 centos 7.8.20 ...

  9. 算法(Python版)|156Kstars|神级项目-(1)The Algorithms - Python简介

    文章目录 算法(Python版) 项目地址 项目概况 说明 参与入门 社区频道 算法列表 Arithmetic Analysis 算术分析 Audio Filters 音频过滤器 Backtracki ...

最新文章

  1. 指向字符串的指针为何不能用来修改此字符串
  2. SmartQuery WebPart 2.0 发布。
  3. 20210625 函数的极限
  4. 关于runjs的一些想法
  5. java 二进制 归属权限_java 二进制 权限管理
  6. 406. 根据身高重建队列
  7. js var是什么类型_面试官问你JS基本类型时他想知道什么?
  8. 【板栗糖GIS】kmz数据是什么,如何打开,普通数据如何转换成kmz格式
  9. 如何优化深度学习模型
  10. 直流电机正反转驱动电路
  11. 微软升级网页版Skype 没有帐户也能拨打网络电话
  12. windows磁盘分区合并(比如合并到C盘/分区扩容)问题/删除恢复分区
  13. 关于系统迁移到固态硬盘后,新系统引导项丢失的问题
  14. CommandLineRunner接口介绍
  15. linux ksh 用户名,学习Linux中ksh的用法
  16. Spring Cloud + Mybatis 多数据源配置
  17. 哈佛商业评论:关于区块链的真相
  18. Vue 源码解读 起步(二)
  19. Microsoft Offfice 2010 测试版下载
  20. 使用Umi SSR 报错 Warning: Did not expect server HTML to contain a <div> in <div>.

热门文章

  1. 12月第2周.NET总量TOP10:中土意涨幅均环比增大
  2. win系统下mysql忘记root账户密码的解决办法
  3. ruby html解析器
  4. 爱情,是我一生中最虔诚的信仰
  5. DELL台式机BIOS常见问题
  6. .Net软件UI界面测试自动化--UIAutomation技术
  7. 不可不知的C#基础 4. 延迟加载 -- 提高性能
  8. SpringMVC中Controller跳转到另一个Controller方法
  9. 导出Excel表格时,如何把数据库表中的编号转换成配置文件中的汉字
  10. ASP.NET配置错误页面浅析