Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengalih keluar Tag `omitempty` daripada JSON dalam Struktur Penampan Protokol?

Bagaimana untuk Mengalih keluar Tag `omitempty` daripada JSON dalam Struktur Penampan Protokol?

Mary-Kate Olsen
Lepaskan: 2024-12-14 16:45:11
asal
994 orang telah melayarinya

How to Remove `omitempty` Tags from JSON in Protocol Buffer Structs?

Cara Mengalih Keluar Teg Omitempty daripada Teg JSON Dijana dalam Struktur Penampan Protokol

Dalam kes penggunaan tertentu, mungkin perlu mengalih keluar teg omitempty daripada teg JSON yang dihasilkan untuk struktur penimbal protokol. Penampan protokol, terutamanya apabila digunakan dengan gRPC, ialah alat yang berkuasa untuk penyirian dan pemindahan data. Walau bagaimanapun, kemasukan teg omitempty boleh menyebabkan peninggalan nilai lalai atau kosong semasa JSON marshaling, yang mungkin tidak diingini.

Masalahnya

Apabila menggunakan penampan protokol dengan proksi JSON, struct yang dihasilkan mungkin mempunyai teg omitempty yang disertakan dalam teg JSON, seperti yang dilihat dalam contoh di bawah:

message Status {
  int32 code = 1;
  string message = 2;
}
Salin selepas log masuk

Struktur terhasil yang terhasil:

type Status struct {
  Code int32 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"`
  Message string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"`
}
Salin selepas log masuk

Penyelesaian

Untuk mengalih keluar tag omitempty daripada struct yang dihasilkan, ada ialah dua pendekatan yang mungkin:

  1. Menggunakan grpc-gateway: Jika anda menggunakan grpc-gateway, anda boleh mengkonfigurasi servemux dengan pilihan berikut:
gwmux := runtime.NewServeMux(runtime.WithMarshalerOption(runtime.MIMEWildcard, &runtime.JSONPb{OrigName: true, EmitDefaults: true}))
Salin selepas log masuk
  1. Menggunakan google.golang.org /protobuf/encoding/protojson: Untuk aplikasi di luar grpc-gateway, anda boleh menggunakan pakej google.golang.org/protobuf/encoding/protojson bukannya pengekodan/json standard untuk marshaling. Pakej ini menyediakan kawalan yang lebih baik ke atas proses marshaling, termasuk keupayaan untuk mengeluarkan nilai lalai:
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) // You should check for errors here
}
Salin selepas log masuk

Dengan melaksanakan salah satu pendekatan ini, anda boleh mengalih keluar tag omitempty secara berkesan daripada teg JSON yang dihasilkan untuk struktur penimbal protokol anda, memastikan bahawa nilai lalai atau kosong disertakan semasa JSON marshaling.

Atas ialah kandungan terperinci Bagaimana untuk Mengalih keluar Tag `omitempty` daripada JSON dalam Struktur Penampan Protokol?. 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