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

Bagaimana untuk Alih Keluar Teg `omitempty` daripada JSON Dijana Protobuf?

Linda Hamilton
Lepaskan: 2024-11-30 13:04:11
asal
878 orang telah melayarinya

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

Mengalih keluar Teg Omitempty daripada JSON yang Dihasilkan Protobuf

Apabila menjana kelas Protobuf untuk digunakan dengan proksi JSON, anda mungkin menghadapi teg omitempty pada struct yang dihasilkan. Teg ini menindas medan kosong semasa JSON marshaling, yang boleh menjadi tidak diingini dalam senario tertentu.

Untuk mengalih keluar teg omitempty daripada struct yang dijana:

Menggunakan grpc-gateway

Jika anda menggunakan grpc-gateway, anda boleh melumpuhkan omitempty tingkah laku dengan menyatakan pilihan berikut semasa membuat servemux anda:

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

Di luar grpc-gateway

Untuk menyusun mesej Protobuf anda tanpa tingkah laku yang tidak diketepikan di luar grpc- get laluan, gunakan pakej google.golang.org/protobuf/encoding/protojson dan bukannya pengekodan standard/json pakej:

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
}
Salin selepas log masuk

Nota:

  • Pakej google.golang.org/protobuf menggantikan github.com/golang/protobuf yang ditamatkan dan jsonpbnya pakej.
  • Pilihan EmitDefaults memastikan bahawa medan kosong disertakan dalam JSON output.

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

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan