首頁 >後端開發 >Golang >如何從 Protobuf 產生的 JSON 中刪除「omitempty」標籤?

如何從 Protobuf 產生的 JSON 中刪除「omitempty」標籤?

Patricia Arquette
Patricia Arquette原創
2024-11-30 13:25:13958瀏覽

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

從Protocol Buffer 產生的JSON 標籤中刪除Omitempty 標籤

簡介

Protocol Buffers>Proto語言-中立、平台中立的可擴展機制,用於序列化結構化資料。使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn