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
Linda Hamiltonasal
2024-11-30 13:04:11890semak imbas

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}))

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
}

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!

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