You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Protobuf中bytes字段转JSON时是否会被转换为Base64?

Protobuf bytes字段转JSON时是否会被Base64编码?

问题背景

你提到在将Protobuf Message转换为JSON时,不确定bytes类型的字段是否会被转成Base64编码,同时给出了你的proto定义和转换代码:

你的Proto文件

syntax = "proto2";
package user;
message user_message {
    required bytes username = 1;
    optional string phonenum = 2;
    optional string password = 3;
}

你的转换代码

base_msg = msg_periodic_pb2.m_apps_message()
base_msg.ParseFromString(message)
base_msg = json_format.MessageToJson(base_msg)

回答

Short answer: Yes,你的username这个bytes字段在转换为JSON时,默认会被编码成Base64字符串。

这是因为JSON本身并没有原生支持二进制数据类型,而Protobuf的官方JSON映射规范(你使用的json_format工具正是遵循这个规范)明确规定:bytes类型的字段需要被序列化为Base64编码的字符串。这样做既能保证二进制数据的完整性,又能完全符合JSON的格式要求。

举个实际例子,如果你的username字段原始字节是b"john_doe",转换后的JSON里对应的字段值会是"am9obl9kb2U="——这就是b"john_doe"的Base64编码结果。

如果你的需求是避免Base64编码(虽然JSON本身不支持原始二进制存储,但也许你有特殊业务场景),需要注意:json_format.MessageToJson并没有直接关闭这个转换的选项,因为这是遵循规范的默认行为。不过你可以在转换前手动提取bytes字段的原始值,做自定义处理后再写入JSON结构。


内容的提问来源于stack exchange,提问作者swateek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:10:45