为了账号安全,请及时绑定邮箱和手机立即绑定

如何仅使用消息描述符将 protobuf 线格式转换为 JSON?

如何仅使用消息描述符将 protobuf 线格式转换为 JSON?

Go
qq_笑_17 2022-06-21 15:48:15
通常,要将 protobuf 消息从有线格式转换为 JSON,您只需将有线格式解组为proto.Message动态类型为具体 Go 类型(由 protoc-gen-go 生成),然后使用protojson包将其解组为 JSON。如果您没有具体的 Go 类型,我想知道如何做同样的事情,而是一个protoreflect.MessageDescriptor。描述符应该具有解析有线格式并从中构造 JSON(或其他格式)所需的所有信息,但我似乎找不到用于此的 API。看来我需要以下内容:func UnmarshalFromWire(b []byte, desc protoreflect.MessageDescriptor) (protoreflect.Message, error)func MarshalToJSON(m protoreflect.Message) ([]byte, error)是否有类似或类似的 API?
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

该dynamicpb模块执行第一部分(从MessageDescriptor到proto.Message,不是protoreflect.Message)。


func UnmarshalFromWire(b []byte, desc protoreflect.MessageDescriptor) (proto.Message, error) {

  m := dynamicpb.NewMessage(desc)

  if err := proto.Unmarshal(b, m); err != nil {

    return nil, err

  }

  return m, nil

}

第二部分只是你的标准protojson.Marshal——因为你现在有一个完全有效的proto.Message.


查看完整回答
反对 回复 2022-06-21
  • 1 回答
  • 0 关注
  • 239 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号