【python protobuf序列化】python中如何protobuf与json互相转换

没有检索到摘要

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、protobuf下载安装
下载地址:
https://github.com/protocolbuffers/protobuf/releases
电脑系统是windows10, 下载protoc-3.15.2-win64.zip 解压到相应的目录D:\Program Files下,然后配置环境变量path
D:\Program Files\bin 加入path

在这里插入图片描述
在这里插入图片描述

二、新建目录example
在这里插入图片描述

新建文件openrtb.proto 内容如下:

syntax = "proto3";
package proto;
message param {
    optional  string name = 1;
    optional  string value = 2;
    optional  string descibe = 3;
}

下面我们将用命令生成openrtb_pb2.py 文件
cmd 命令 cd 进入example 目录下,
执行如下脚本,直接能够生成openrtb_pb2.py

protoc  --python_out=. openrtb.proto

上面步骤做好之后,下面我们需要用python实现基于protobuf协议将json转化为pb string,将pb string转成json

demo 如下:

from example import openrtb_pb2
from google.protobuf import json_format
import json

def pb_to_json(pbStringRequest):
    """将pbstring转化为jsonStringResponse返回"""
    jsonStringRequest=json_format.MessageToJson(pbStringRequest)
    return jsonStringRequest

def json_to_pb(jsonStringResponse):
    """将jsonStringResponse转化为pbString返回"""
    pbStringResponse = json_format.Parse(json.dumps(jsonStringResponse), openrtb_pb2.param())
    return pbStringResponse


if __name__ == '__main__':
    json_obj={'name':'fcao','value':'0.74','descibe':'202102241339'}
    request=json_to_pb(json_obj)
    print(request)
    print(type(request))
    json_result = pb_to_json(request)
    print(json_result)
    print(type(json_result))

运行结果如下:

name: "fcao"
value: "0.74"
descibe: "202102241339"

<class 'openrtb_pb2.param'>
{
  "name": "fcao",
  "value": "0.74",
  "descibe": "202102241339"
}
<class 'str'>

Process finished with exit code 0

错误解决:

AttributeError: module 'google.protobuf.descriptor' has no attribute '_internal_create_key'

解决办法:

pip install --upgrade protobuf
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东华果汁哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值