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
Mary-Kate Olsenasal
2024-12-14 16:45:111071semak imbas

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

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"`
}

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

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!

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