Artikel ini ditulis oleh ruangan tutorial golang untuk memperkenalkan cara menggunakan Json dalam bahasa Go. Saya harap ia dapat membantu rakan yang memerlukan.
Enkod
mengekod objek ke dalam data JSON
, menerima objek interface{}
dan mengembalikan []byte
dan error
:
1 |
|
Marshal
Fungsi akan melintasi keseluruhan objek secara rekursif dan mengekod objek mengikut jenis ahli secara bergilir-gilir Peraturan penukaran jenis adalah seperti berikut:
Penukaran jenis kepada bool
JSON
Boolean
JSON
Number
ditukar menjadi rentetan string
(dengan petikan "") JSON
ditukar menjadi struct
daripada JSON
, dan kemudian secara rekursif mengikut jenis setiap ahli Dikemas Object
akan JSON
dikodkan dahulu dan kemudian ditukar kepada Array
rentetan
[]byte
ditukar kepada base64
daripada JSON
,
map
JSON
Object
ditukar mengikut jenis dalaman sebenar key
string
's interface{}
nil
, JSON
dan jenis lain akan kembalikan null
channel
func
UnsupportedTypeError
1 2 3 4 5 6 7 8 9 |
|
Peraturan penukaran jenis adalah serupa dengan peraturan di atas
JSON
1 |
|
1 2 3 4 5 6 7 8 9 |
|
, ahli yang bermula dengan huruf kecil tidak akan terjejas. Apabila , nama pembolehubah ahli struktur akan dibungkus terus ke dalam sebagai
daripada JSON
, apabila
Mashal
JSON
, jika terdapat medan berlebihan dalam Object
, ia akan dibuang terus; jika key
tiada medan, memberikan nilai kepada pembolehubah dalam struktur akan diabaikan dan tiada ralat akan dilaporkan. JSON
Unmashal
Unmarshal
JSON
StructTagJSON
1 2 3 4 5 6 7 8 9 10 11 12 |
|
, anda boleh mentakrifkan struktur Apabila menandai ahli: Gunakan untuk membiasakan diri dengannya Jika medan adalah atau nilai 0 (nombor 0, rentetan "", tatasusunan kosong [], dsb. ), maka yang dibungkus
Hasilnya tidak akan mempunyai medan ini.JSON
omitempty
nil
JSON
1 2 3 4 5 6 7 8 9 |
|
JSON
Malah, ia adalahTaip takrifan semula. Casting adalah mungkin. Kini terdapat senario di mana format salah satu medan dalam struktur tidak diketahui:
Jika anda menggunakan json.RawMessage
, medan []byte
berada dalam
. Kami mungkin membongkar lapisan pertama
data dahulu, dan kemudian menentukan jenis khusus1 2 3 4 5 |
|
untuk json.RawMessage
kedua. Args
Unmarshal
Apa yang perlu diperhatikan di sini ialah jenis penunjuk Args
mesti digunakan, jika tidak, JSON
akan dianggap sebagai jenis Cmd
dan akan dibungkus ke dalam rentetan Args
yang dikodkan semasa pembungkusan . Unmarshal
*json.RawMessage
Args
Menggunakan antara muka{}[]byte
base64
jenis dalam , akan ditukar secara automatik kepada jenis data yang sepadan :
Ada dua perkara yang perlu diperhatikan. Salah satunya ialah semua nilai ditukar secara automatik kepada jenis interface{}
dan anda perlu menukarnya secara manual kepada jenis Unmarshal
, JSON
dan lain-lain yang diperlukan apabila menggunakannya. Yang kedua ialah
1 |
|
dan nama medan JSON
digunakan terus sebagai float64
untuk akses. Apabila anda tidak tahu format int
data, anda boleh menggunakan int64
. JSON
自定义类型
如果希望自己定义对象的打包解包方式,可以实现以下的接口:
1 2 3 4 |
|
实现该接口的对象需要将自己的数据打包和解包。如果实现了该接口,json
在打包解包时则会调用自定义的方法,不再对该对象进行其他处理。
Atas ialah kandungan terperinci Ajar anda cara menggunakan Json dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!