Jadual Kandungan
✅ marshal dan unmarshal struktur asas
✅ Marshal dan Unmarshal yang mengendalikan peta
✅ Proses kepingan dan tatasusunan
✅ Abaikan medan kosong (menggunakan omitempty)
✅ struktur bersarang dan nama medan tersuai
✅ Cadangan pengendalian ralat
Ringkasan: Mata Utama
Rumah pembangunan bahagian belakang Golang Pergi dengan contoh Json Marshal dan Unmarshal

Pergi dengan contoh Json Marshal dan Unmarshal

Jul 28, 2025 am 04:32 AM
json go

Di GO, pakej pengekodan/JSON digunakan untuk mengendalikan siri dan deserialization JSON. 1. Bidang struktur perlu diakses dengan huruf besar dalam huruf pertama. Tetapkan nama utama melalui JSON: "Nama". OmitEmpty Omits Fields Apabila nilai adalah sifar. JSON: "-" mengabaikan bidang; 2. Gunakan json.marshal untuk menukar struktur, peta atau slice ke rentetan json, dan gunakan json.unmarshal untuk menghuraikan data json ke dalam pembolehubah; 3. Apabila deserializing untuk antara muka {}, nombor lalai ke jenis Float64 dan perlu ditukar melalui penegasan jenis; 4. Struktur bersarang boleh bersiri secara normal, dan struktur tertanam akan diperluaskan; 5. Sentiasa periksa kesilapan dalam marshal dan unmarshal. Masalah biasa termasuk kesilapan format JSON, jenis ketidakcocokan, dan bidang yang tidak dieksport. Betul menggunakan tag struct dan struktur data boleh fleksibel mengendalikan pelbagai senario JSON.

Pergi dengan contoh Json Marshal dan Unmarshal

Dalam bahasa Go, pakej encoding/json menyediakan sokongan untuk siriisasi (marshal) dan deserialization (unmarshal) data JSON. Berikut adalah beberapa contoh biasa untuk menunjukkan cara menggunakan json.Marshal dan json.Unmarshal .

Pergi dengan contoh Json Marshal dan Unmarshal

✅ marshal dan unmarshal struktur asas

 Pakej utama

import (
    "Pengekodan/JSON"
    "FMT"
    "Log"
)

taipkan orang struct {
    Nama String `Json:" Nama "`
    Umur int `json:" umur "`
    E -mel rentetan `json:" e -mel, omitempty "`
}

func main () {
    // Contoh 1: Struktur Marshal → Json
    p: = orang {
        Nama: "Alice",
        Umur: 30,
        E -mel: "alice@example.com",
    }

    data, err: = json.marshal (p)
    jika err! = nil {
        log.fatal (err)
    }
    fmt.printf ("Hasil Marshal: %s \ n", data)

    // Contoh 2: Unmarshal JSON → Struktur jsondata: = `{" name ":" bob "," umur ": 25," e -mel ":" bob@example.com "}`
    var p2 orang
    err = json.unmarshal ([] byte (jsondata), & p2)
    jika err! = nil {
        log.fatal (err)
    }
    fmt.printf ("Hasil unmarshal: %v \ n", p2)
}

Output:

 Hasil Marshal: {"Name": "Alice", "Umur": 30, "E -mel": "Alice@example.com"}
Hasil Unmarshal: {Nama: Bob Umur: 25 E -mel: bob@example.com}

Notis:

Pergi dengan contoh Json Marshal dan Unmarshal
  • json:"name" Menentukan nama utama medan di JSON.
  • omitempty bermakna bahawa jika medan adalah nilai sifar (seperti rentetan kosong, 0, nih, dll), ia ditinggalkan semasa siri.

✅ Marshal dan Unmarshal yang mengendalikan peta

 // peta marshal → json
M: = Map [String] Interface {} {
    "Nama": "Charlie",
    "Umur": 35,
    "tags": [] string {"go", "dev"},
}
data, _: = json.marshal (m)
fmt.printf ("peta ke json: %s \ n", data)

// unmarshal json → peta
var m2 peta [string] antara muka {}
jsondata: = `{" name ":" David "," umur ": 28," aktif ": true}`
json.unmarshal ([] byte (jsondata), & m2)
fmt.printf ("json to map: %v \ n", m2)

// Nota: Nombor dalam peta menyelesaikan float64 secara lalai
jika umur, ok: = m2 ["umur"]. (float64); ok {
    fmt.println ("umur:", int (umur))
}

Output:

 Peta ke json: {"umur": 35, "nama": "charlie", "tags": ["go", "dev"]}
JSON TO MAP: Peta [Umur: 28 Nama: David Aktif: Benar]
Umur: 28

⚠️ Nota: Apabila json.Unmarshal parses ke interface{} , nombornya adalah float64 secara lalai, dan ketegasan jenis diperlukan.

Pergi dengan contoh Json Marshal dan Unmarshal

✅ Proses kepingan dan tatasusunan

 orang: = [] orang {
    {Nama: "Alice", Umur: 30},
    {Nama: "Bob", Umur: 25},
}

// Slice Marshal
data, _ = json.marshal (orang)
fmt.printf ("Slice to JSON: %s \ n", data)

// array unmarshal json → slice
jsondata: = `[{" name ":" eve "," umur ": 22}, {" name ":" Frank "," usia ": 33}]`
var orang2 [] orang
json.unmarshal ([] byte (jsondata), & people2)
fmt.printf ("json to slice: %v \ n", people2)

Output:

 Slice to Json: [{"Name": "Alice", "Umur": 30}, {"Name": "Bob", "Umur": 25}]
Json to Slice: [{Name: Eve Umur: 22 E -mel:} {Nama: Frank Umur: 33 Email:}]

✅ Abaikan medan kosong (menggunakan omitempty)

 p: = orang {
    Nama: "Grace",
    Umur: 0, // nilai sifar // Tinggalkan kosong dalam e -mel}

data, _ = json.marshal (p)
fmt.printf ("dengan omitempty: %s \ n", data)

Output:

 Dengan OmitEmpty: {"Name": "Grace"}

Kerana Age adalah 0 (nilai sifar int), tetapi tidak ada omitempty , ia masih akan output.
Email mempunyai omitempty dan kosong, jadi ia ditinggalkan.

Sekiranya anda ingin menghilangkan nilai sifar, anda boleh menulisnya seperti ini:

 Umur int `json:" umur, omitempty "`

✅ struktur bersarang dan nama medan tersuai

 Taipkan Alamat Struct {
    City String `Json:" City "`
    Zip String `json:" zip "`
}

taipkan struct pengguna {
    Orang `json:" orang "` // Alamat Alamat Struktur Inline `JSON:" Alamat "`
    Rentetan kata laluan `json:"-"` // tidak terlibat dalam bersiri}

u: = pengguna {
    Orang: orang {nama: "Helen", umur: 29},
    Alamat: Alamat {City: "Beijing", Zip: "100000"},
    Kata Laluan: "Secret123",
}

data, _: = json.marshal (u)
fmt.printf ("Struct bersarang: %s \ n", data)

Output:

 Struct bersarang: {"orang": {"name": "Helen", "umur": 29}, "alamat": {"city": "beijing", "zip": "100000"}}
  • Struktur tertanam akan diperluaskan.
  • json:"-" bermaksud bahawa medan tidak akan bersiri atau deserialized.

✅ Cadangan pengendalian ralat

Apabila menggunakan json.Marshal dan json.Unmarshal , selalu periksa kesilapan :

 data, err: = json.marshal (somevalue)
jika err! = nil {
    Log.printf ("Ralat Marshal: %V", Err)
    Kembali
}

err = json.unmarshal (jsondata, & sasaran)
jika err! = nil {
    Log.printf ("Kesalahan Unmarshal: %V", Err)
    Kembali
}

Kesalahan biasa termasuk:

  • Format JSON adalah haram
  • Taipkan ketidakcocokan (seperti yang dijangkakan tetapi dapatkan rentetan)
  • Bidang tidak boleh dieksport (medan struct mesti dipermodalkan untuk diakses oleh pakej JSON)

Ringkasan: Mata Utama

  • Bidang struktur mesti dipermodalkan dalam huruf pertama yang akan diakses oleh pakej json .
  • Gunakan json:"fieldName" untuk menyesuaikan nama kunci.
  • omitempty boleh menghilangkan medan nilai kosong.
  • json:"-" Abaikan bidang.
  • map[string]interface{} dan []interface{} boleh digunakan untuk struktur dinamik, tetapi perhatikan untuk menaip pernyataan.
  • Nombor ini float64 secara lalai dalam interface{} .

Pada dasarnya itu sahaja. Dalam perkembangan sebenar, menggabungkan struct tag dan struktur data yang munasabah boleh fleksibel mengendalikan kebanyakan senario JSON.

Atas ialah kandungan terperinci Pergi dengan contoh Json Marshal dan Unmarshal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1527
276
Cara Mendapatkan Masa Semasa Pergi Cara Mendapatkan Masa Semasa Pergi Aug 06, 2025 am 11:28 AM

UseTime.now () togetTheCurrentLocalTimeasatime.TimeObject; 2.FormatTheTimeSingTheFormatMethodWithlayoutsike "2006-01-0215: 04:05 "; 3.GetutTimeByCallingUtc () ontheresulttime.now (); 4.ExtractComponentsLikeyear, bulan, dayingingMethodssuchasyear (), m

Bagaimana cara mencetak fail JSON di Python? Bagaimana cara mencetak fail JSON di Python? Aug 07, 2025 pm 12:10 PM

Untuk mencantikkan dan mencetak fail JSON, anda perlu menggunakan parameter indent modul JSON. Langkah -langkah khusus ialah: 1. Gunakan json.load () untuk membaca data fail JSON; 2. Gunakan json.dump () dan tetapkan indent kepada 4 atau 2 untuk menulis ke fail baru, dan kemudian fail JSON yang diformat boleh dihasilkan dan percetakan yang dihiasi dapat diselesaikan.

Cara membuat dan menggunakan jenis ralat tersuai di Go Cara membuat dan menggunakan jenis ralat tersuai di Go Aug 11, 2025 pm 11:08 PM

Dalam GO, mencipta dan menggunakan jenis ralat tersuai dapat meningkatkan ekspresi dan kebarangkalian pengendalian ralat. Jawapannya adalah untuk membuat ralat tersuai dengan menentukan struktur yang melaksanakan kaedah ralat (). Sebagai contoh, ValidationError mengandungi medan medan dan mesej dan mengembalikan maklumat ralat yang diformat. Kesalahan itu kemudiannya boleh dikembalikan dalam fungsi, mengesan jenis ralat tertentu melalui penegasan jenis atau ralat. Untuk melaksanakan logik yang berbeza. Anda juga boleh menambah kaedah tingkah laku seperti iskritikal kepada kesilapan tersuai, yang sesuai untuk senario yang memerlukan data berstruktur, pemprosesan yang dibezakan, eksport perpustakaan atau integrasi API. Dalam kes -kes yang mudah, kesilapan. Kesalahan, dan kesilapan yang telah ditetapkan seperti errnotfound boleh digunakan untuk sebanding

Bagaimanakah anda melengkapkan permohonan pergi? Bagaimanakah anda melengkapkan permohonan pergi? Aug 06, 2025 am 05:52 AM

Cross-compilingagoApplicationIsstraightforwardingingingbuilt-insupportviagoosandgoarch.1.SetGoOsFortHetargetoperatingsystem (mis., Linux, Windows, Darwin) .2

Cara menangani panik dan pulih dalam perjalanan Cara menangani panik dan pulih dalam perjalanan Aug 06, 2025 pm 02:08 PM

Fungsi pulih mesti dipanggil untuk menunda untuk menangkap panik; 2. Gunakan pemulihan dalam program jangka panjang seperti Goroutine atau Server untuk mengelakkan keseluruhan program daripada terhempas; 3. Memulihkan tidak boleh disalahgunakan, hanya digunakan apabila ia dikendalikan, untuk mengelakkan menggantikan pengendalian ralat biasa; 4. Amalan terbaik termasuk merakam maklumat panik, menggunakan debug.stack () untuk mendapatkan jejak timbunan dan pulih pada tahap yang sesuai. Pulih hanya sah dalam penangguhan dan harus digunakan untuk debugging dengan log. Bug berpotensi tidak boleh diabaikan. Pada akhirnya, kod itu harus direka dengan kesilapan yang kembali dan bukannya panik.

Cara Menggunakan Laluan/FilePath Untuk Manipulasi Laluan Lintas-Platform di GO Cara Menggunakan Laluan/FilePath Untuk Manipulasi Laluan Lintas-Platform di GO Aug 08, 2025 pm 05:29 PM

UseFilePath.join () tosafelyconstructPathSwithCorrectos-specificseparators.2.usefilepath.clean () toremoveredundantelements ".." dan "."

Bagaimana anda mengendalikan isyarat dalam permohonan Go? Bagaimana anda mengendalikan isyarat dalam permohonan Go? Aug 11, 2025 pm 08:01 PM

Cara yang betul untuk memproses isyarat dalam aplikasi GO adalah dengan menggunakan pakej OS/isyarat untuk memantau isyarat dan melakukan penutupan elegan. 1. Gunakan isyarat.notify untuk menghantar sigint, sigterm dan isyarat lain ke saluran; 2. Jalankan perkhidmatan utama di Goroutine dan menyekat isyarat menunggu; 3. Selepas menerima isyarat, lakukan penutupan elegan dengan tamat masa melalui konteks.withtimeout; 4. Membersihkan sumber seperti sambungan pangkalan data penutup dan menghentikan Goroutine latar belakang; 5. Gunakan Signal.Reset untuk memulihkan tingkah laku isyarat lalai apabila perlu untuk memastikan bahawa program itu dapat ditamatkan dengan pasti di Kubernet dan persekitaran lain.

Perbandingan Prestasi: Java vs Go untuk Perkhidmatan Backend Perbandingan Prestasi: Java vs Go untuk Perkhidmatan Backend Aug 14, 2025 pm 03:32 PM

GotypicallyoffersbetterruntimeperformanceWithhightherthroughputandlowerlatency, terutama sekali-sekala/o-heavyservices, duetoitslightweightgoroutinesandeficientscheduler, whentjava, wifklowertostart, canmatchgoincpu-boundsafterjitoptimization.2.

See all articles