Python读写protobuf和json

date
Nov 20, 2018
slug
python-protobuffer-json-use
status
Published
tags
开发
Python
编程
summary
python3 读写protobuffer 和json
type
Post
💡
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。JSON是一种基于JavaScript语法的轻量级数据交换格式,它独立于语言与平台,具有自我描述性,易于理解,便于解析与生成,优秀的特性使得JSON被越来越多的使用。

Protobuf

安装protobuf和json

  • 由于python标准库已经支持json的读写,因此不需要额外的安装一些依赖,而protobuf则需要额外的安装依赖,直接pip3安装即可(protobuf3)
protobuf文件的定义 参考官方教程即可官网 本文不作过多的描述

protobuf编译

 

使用 protobuf API

  • 使用起来非常方便,直接导入即可
  • 网上的教程大部分都是翻译官网的教程,更深入的基本没有发现,在实际使用中总结除了几点注意事项
  • 注意事项
      1. protobuf如果采用了struct类型,对应到python中也有对应的struct模块,struct模块主要用来打包二进制数据和解包二进制数据,千万不能在python中直接拼接数据!!!struct打包解包分别为struct.pack()struct.unpack()更多使用细节请参考struct模块的使用
      1. 如果想定义一个空的message的话,这种情况一般会出现在message嵌套message。请使用CopyFrom函数如:
        1. message序列化和反序列化,使用SerializeToStrinParseFromString这两个函数即可,另外值得一提的是提供了message转json的方法可以直接使用,借助from google.protobuf.json_format import MessageToJson,可以很快将反序列化后的message转成熟悉的json格式。
     

    读写JSON

    python对JSON支持相当好,内置的dict类型和JSON类型及其相似,因此CRUD JSON中的数据是通过对dict 操作

    读取json文件

    写json文件

    json类型和dict类型转换

    json.dumps()json.loads()
     

    © hack-fang 1995 - 2024