Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengalih keluar Teg `omitempty` daripada JSON Dijana Protobuf?

Bagaimana untuk Mengalih keluar Teg `omitempty` daripada JSON Dijana Protobuf?

Patricia Arquette
Patricia Arquetteasal
2024-11-30 13:25:13869semak imbas

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

Mengalih keluar Teg Omitempty daripada Teg JSON Dijana Penimbal Protokol

Pengenalan

Penimbal Protokol (Protobuf) ialah bahasa -mekanisme boleh diperluaskan neutral, platform neutral untuk mensiri data berstruktur. Apabila bekerja dengan Protobuf, mungkin perlu mengalih keluar teg omitempty daripada teg JSON yang dijana dalam fail *.pb.go. Artikel ini meneroka cara untuk mencapai ini menggunakan pelbagai kaedah.

Pilihan grpc-gateway

Jika menggunakan grpc-gateway, termasuk pilihan berikut semasa mencipta ServeMux akan memastikan bahawa nilai lalai hadir semasa JSON marshaling:

gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))

protobuf Pakej

Di luar grpc-gateway, pakej google.golang.org/protobuf/encoding/protojson (kini menggantikan github.com/golang/protobuf/jsonpb yang tidak digunakan) boleh digunakan untuk marshal Protocol Mesej penimbal. Dengan menggunakan struct Marshaler dengan set EmitDefaults: true, nilai lalai akan disertakan dalam output 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
}

Atas ialah kandungan terperinci Bagaimana untuk Mengalih keluar Teg `omitempty` daripada JSON Dijana Protobuf?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn