这个包产生的输出与标准的”encoding/json”包不同,后者不能在协议缓冲区消息上正确操作
文档:https://pkg.go.dev/google.golang.org/protobuf@v1.27.1/encoding/protojson

Functions

  1. func Format(m proto.Message) string
  2. func Marshal(m proto.Message) ([]byte, error)
  3. func Unmarshal(b []byte, m proto.Message) error

type MarshalOptions

  1. type MarshalOptions struct {
  2. pragma.NoUnkeyedLiterals
  3. // Multiline指定封送程序是否应该将输出格式化为缩进格式,使每个文本元素在新行上。
  4. // 如果Indent是空字符串,则选择任意的缩进。
  5. Multiline bool
  6. // Indent指定缩进字符集,以便每个条目前面都有Indent,并以换行符结束。
  7. // 如果非空,则Multiline被视为true。缩进只能由空格或制表符组成。
  8. Indent string
  9. // AllowPartial允许对缺少必需字段的消息进行封送而不返回错误。
  10. // 如果AllowPartial为false(默认值),如果缺少任何必需字段,Marshal将返回错误。
  11. AllowPartial bool
  12. // 在JSON中使用proto字段名而不是lowerCamelCase名称
  13. UseProtoNames bool
  14. // 使用数字替代Enum
  15. UseEnumNumbers bool
  16. // EmitUnpopulated指定是否发出未填充的字段。它不会发出未填充的字段或未填充的扩展字段。
  17. // 未填充字段发出的JSON值如下:
  18. // ╔═══════╤════════════════════════════╗
  19. // ║ JSON │ Protobuf field ║
  20. // ╠═══════╪════════════════════════════╣
  21. // ║ false │ proto3 boolean fields ║
  22. // ║ 0 │ proto3 numeric fields ║
  23. // ║ "" │ proto3 string/bytes fields ║
  24. // ║ null │ proto2 scalar fields ║
  25. // ║ null │ message fields ║
  26. // ║ [] │ list fields ║
  27. // ║ {} │ map fields ║
  28. // ╚═══════╧════════════════════════════╝
  29. EmitUnpopulated bool
  30. // Resolver is used for looking up types when expanding google.protobuf.Any
  31. // messages. If nil, this defaults to using protoregistry.GlobalTypes.
  32. Resolver interface {
  33. protoregistry.ExtensionTypeResolver
  34. protoregistry.MessageTypeResolver
  35. }
  36. }

func (o MarshalOptions) Format(m proto.Message) string
func (o MarshalOptions) Marshal(m proto.Message) ([]byte, error)

type UnmarshalOptions

  1. type UnmarshalOptions struct {
  2. pragma.NoUnkeyedLiterals
  3. // 如果设置了AllowPartial,那么将导致丢失必需字段的消息将不会返回错误。
  4. AllowPartial bool
  5. // If DiscardUnknown is set, unknown fields are ignored.
  6. DiscardUnknown bool
  7. // Resolver is used for looking up types when unmarshaling
  8. // google.protobuf.Any messages or extension fields.
  9. // If nil, this defaults to using protoregistry.GlobalTypes.
  10. Resolver interface {
  11. protoregistry.MessageTypeResolver
  12. protoregistry.ExtensionTypeResolver
  13. }
  14. }

func (o UnmarshalOptions) Unmarshal(b []byte, m proto.Message) error