Saya ingin menggunakan "encoding/json"
paket untuk menyusun struct yang dideklarasikan di salah satu paket impor aplikasi saya.
Misalnya.:
type T struct {
Foo int
}
Karena itu diimpor, semua bidang yang tersedia (diekspor) di struct dimulai dengan huruf besar. Tapi saya ingin memiliki nama kunci huruf kecil:
out, err := json.Marshal(&T{Foo: 42})
akan menghasilkan
{"Foo": 42}
tapi saya ingin mendapatkannya
{"foo": 42}
Apakah mungkin untuk menyelesaikan masalah dengan cara yang mudah?
json
go
marshalling
Anisus
sumber
sumber
Jawaban:
Lihatlah dokumen untuk enkode / json.Marshal . Ini membahas menggunakan tag bidang struct untuk menentukan bagaimana json yang dihasilkan diformat.
Sebagai contoh:
Ini akan menghasilkan JSON sebagai berikut:
sumber
reflect
paket.json:"some_tag"
sebagai gantijson: "some_tag"
. Saya mendapat sedikit dengan ini untuk sementara waktu.Anda bisa membuat struct sendiri dengan kunci yang ingin Anda ekspor, dan memberi mereka tag json yang sesuai untuk nama huruf kecil. Kemudian Anda dapat menyalin struct yang diinginkan ke dalam milik Anda sebelum menyandikannya sebagai JSON. Atau jika Anda tidak ingin repot membuat struct lokal, Anda mungkin bisa membuat
map[string]interface{}
dan menyandikannya.sumber
map[string]interface{}
akan bekerja selama saya tidak berakhir dengan objek / struct bersarang