首页 > 后端开发 > Golang > 如何从 Protobuf 生成的 JSON 中删除'omitempty”标签?

如何从 Protobuf 生成的 JSON 中删除'omitempty”标签?

Patricia Arquette
发布: 2024-11-30 13:25:13
原创
856 人浏览过

How to Remove the `omitempty` Tag from Protobuf-Generated JSON?

从 Protocol Buffer 生成的 JSON 标签中删除 Omitempty 标签

简介

Protocol Buffers (Protobuf) 是一种语言-中立、平台中立的可扩展机制,用于序列化结构化数据。使用 Protobuf 时,可能需要从 *.pb.go 文件中生成的 JSON 标签中删除 omitempty 标签。本文探讨了如何使用各种方法来实现此目的。

grpc-gateway 选项

如果使用 grpc-gateway,在创建 ServeMux 时包括以下选项将确保JSON 封送过程中存在默认值:

gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
登录后复制

protobuf包

grpc-gateway 之外,可以使用 google.golang.org/protobuf/encoding/protojson 包(现在替换已弃用的 github.com/golang/protobuf/jsonpb)来编组协议缓冲消息。通过使用具有 EmitDefaults: true 设置的 Marshaler 结构,默认值将包含在 JSON 输出中:

func sendProtoMessage(resp proto.Message, w http.ResponseWriter) {
    w.Header().Set("Content-Type", "application/json; charset=utf-8")
    m := protojson.Marshaler{EmitDefaults: true}
    m.Marshal(w, resp) // Error handling omitted
}
登录后复制

以上是如何从 Protobuf 生成的 JSON 中删除'omitempty”标签?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板