【问题标题】:Protobuf Message to JSON conversion of bytes field converts string to base64?字节字段的 Protobuf 消息到 JSON 转换将字符串转换为 base64?
【发布时间】:2021-03-03 20:00:09
【问题描述】:

我有一个如下的原型文件:

syntax = "proto2";
package user;

message user_message {
    required bytes   username = 1;
    optional string   phonenum  = 2;
    optional string   password  = 3;
}

当我收到消息时,它被序列化为来自发件人的字符串。

我尝试将其转换为 JSON 对象:

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

当我打印 base_msg 时,将消息转换为 JSON 后,用户名将转换为 base64 字符串。我怎样才能避免这种情况?

【问题讨论】:

    标签: base64 byte protobuf.js


    【解决方案1】:

    Check this comment.

    “这种行为实际上是意料之中的,因为字节字段(与字符串字段不同)可以包含非 UTF8 二进制数据,并且由于无法直接用 JSON 表示,因此我们必须对其进行 base64 编码。”

    所以,如果你真的想要字符串。您不能将 protobuf 类型作为字节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 2012-07-21
      • 2017-07-22
      相关资源
      最近更新 更多