猿问

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

通常,要将 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?


qq_笑_17
浏览 240回答 1
1回答

蝴蝶不菲

该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.
随时随地看视频慕课网APP

相关分类

Go
我要回答