首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用消息描述符将protobuf线格式转换为JSON?

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

Stack Overflow用户
提问于 2020-07-31 18:12:33
回答 1查看 1.8K关注 0票数 0

通常,要将原始消息从有线格式转换为JSON,只需将有线格式解封为一个proto.Message,其动态类型为具体的Go类型(由package go生成),然后使用protojson包将其解封为JSON。

如果没有具体的Go类型,而是一个protoreflect.MessageDescriptor类型,我想知道如何做同样的事情。描述符应该拥有解析有线格式和从它构造JSON (或其他格式)所需的所有信息,但我似乎找不到相应的API。我似乎需要以下几点:

代码语言:javascript
复制
func UnmarshalFromWire(b []byte, desc protoreflect.MessageDescriptor) (protoreflect.Message, error)

func MarshalToJSON(m protoreflect.Message) ([]byte, error)

有类似的API吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-06 21:33:03

dynamicpb模块完成第一部分(从MessageDescriptorproto.Message,而不是protoreflect.Message)。

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63197038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档