如何在命令行将JSON编码为二进制Protocol Buffers(Protobuf)?
如何在命令行将JSON序列化为二进制Protocol Buffers(Protobuf)?
假设你的JSON遵循Protobuf 3 JSON Mapping规范,官方的protoc工具本身并不支持直接将JSON转为二进制Protobuf,但可以通过先将JSON转换为Protobuf文本格式,再借助protoc完成序列化,具体步骤如下:
步骤1:将JSON转换为Protobuf文本格式
你需要用对应语言的Protobuf工具库完成这一步转换,以Python为例:
- 先安装依赖库:
pip install protobuf - 编写简单转换脚本(替换成你的.proto编译模块和目标消息类型):
from google.protobuf.json_format import Parse import your_proto_module_pb2 # 导入编译后的Protobuf模块 # 读取输入JSON文件 with open("input.json", "r", encoding="utf-8") as f: json_data = f.read() # 将JSON解析为Protobuf消息实例 target_msg = your_proto_module_pb2.YourTargetMessage() Parse(json_data, target_msg) # 写入Protobuf文本格式文件 with open("message.prototxt", "w", encoding="utf-8") as f: f.write(str(target_msg))
步骤2:用protoc将文本格式转为二进制Protobuf
执行以下命令(替换对应的消息类型和.proto源文件路径):
protoc --encode=your_proto_module_pb2.YourTargetMessage ./path/to/your_proto.proto < message.prototxt > output.bin
--encode:指定要编码的目标消息类型- 后续参数为你的.proto源文件路径
- 通过重定向读取文本格式输入,最终输出二进制Protobuf文件
如果不想编写脚本,也可以使用第三方CLI工具(如grpcurl等)直接完成JSON到二进制的转换,但上述方法仅依赖官方protoc,兼容性更强。
内容的提问来源于stack exchange,提问作者Touko
相关产品推荐
相关产品推荐

