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

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

Linda Hamilton
发布: 2024-11-30 13:04:11
原创
793 人浏览过

How to Remove `omitempty` Tags from Protobuf-Generated JSON?

从 Protobuf 生成的 JSON 中删除 Omitempty 标签

生成与 JSON 代理一起使用的 Protobuf 类时,您可能会遇到 omitempty 标签生成的结构体。这些标签在 JSON 编组期间抑制空字段,这在某些情况下可能是不受欢迎的。

要从生成的结构中删除 omitempty 标签:

使用 grpc-gateway

如果您使用 grpc-gateway,您可以通过指定来禁用 omitempty 行为创建 servermux 时使用以下选项:

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

grpc-gateway 之外

要在 grpc-gateway 之外封送 Protobuf 消息而不出现 omitempty 行为,请使用google.golang.org/protobuf/encoding/protojson 包而不是标准的encoding/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) // Check for errors here
}
登录后复制

注意:

  • google.golang.org/protobuf 包替换了已弃用的 github.com/golang/protobuf 及其 jsonpb package.
  • EmitDefaults 选项确保空字段包含在 JSON 输出中。

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

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