Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menukar data JSON kepada jenis peta dalam golang

Cara menukar data JSON kepada jenis peta dalam golang

PHPz
PHPzasal
2023-04-21 14:20:375378semak imbas

Di Golang, memandangkan JSON ialah format pertukaran data biasa, keperluan untuk menukar data JSON kepada peta juga sangat biasa. Dalam artikel ini, kami akan memperkenalkan cara menukar data JSON kepada jenis peta menggunakan Golang.

  1. Gunakan fungsi unmarshal perpustakaan standard

Pustaka standard Golang mengandungi banyak fungsi dan jenis berkaitan JSON, yang paling penting ialah fungsi json.Unmarshal. Fungsi ini menyahkod data JSON ke dalam struktur data bahasa Go.

Kita boleh menggunakan fungsi ini untuk menukar rentetan JSON kepada peta. Mula-mula, tentukan pembolehubah yang digunakan untuk menyimpan hasil penyahkodan JSON dan buat tatasusunan bait yang mengandungi rentetan JSON. Kemudian, panggil fungsi json.Unmarshal untuk menyahkod rentetan JSON kepada jenis peta.

Berikut ialah contoh:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    var data = []byte(`{"name":"Tom","age":28,"gender":"male"}`)

    var result map[string]interface{}
    err := json.Unmarshal(data, &result)

    if err != nil {
        fmt.Println("JSON转换失败:", err)
        return
    }

    for key, value := range result {
        fmt.Printf("%s : %v\n", key, value)
    }
}

Dalam kod di atas, kami mentakrifkan hasil pembolehubah jenis peta untuk menyimpan hasil penyahkodan JSON. Apabila memanggil json.Unmarshal untuk menyahkod rentetan JSON, anda perlu menghantar alamat hasilnya. Akhir sekali, kami mengulangi pasangan nilai kunci dalam hasil dan mencetaknya. Outputnya adalah seperti berikut:

name : Tom
age : 28
gender : male
  1. Gunakan pustaka pihak ketiga easyjson

Terdapat juga perpustakaan siri JSON pihak ketiga yang dipanggil easyjson di Golang, yang boleh menjadi lebih mudah Tukar jenis data bahasa JSON kepada Go. Tidak seperti perpustakaan standard json.Unmarshal, easyjson menggunakan penjanaan kod untuk meningkatkan kecekapan penghuraian. Selain itu, ia menyokong ciri yang lebih maju, seperti menghuraikan JSON ke dalam jenis sebaris atau lelaran berkelajuan tinggi.

Untuk menggunakan easyjson, anda perlu memasang pustaka dan memasukkan kod yang dijana dalam kod Go anda. Mula-mula, pasang easyjson:

go get github.com/mailru/easyjson

Seterusnya, tentukan templat easyjson untuk jenis data yang perlu ditukar kepada JSON. Templat easyjson terdiri daripada berbilang fail, setiap satunya mempunyai fail .go dan fail _easyjson.go.

Berikut ialah contoh kod yang menggunakan templat easyjson untuk menukar rentetan JSON kepada peta:

package main

import (
    "fmt"

    "github.com/mailru/easyjson/jlexer"
    "github.com/mailru/easyjson/jwriter"
)

type Person struct {
    Name   string `json:"name"`
    Age    int    `json:"age"`
    Gender string `json:"gender"`
}

func main() {
    data := []byte(`{"name":"Tom","age":28,"gender":"male"}`)

    var result map[string]interface{}
    r := jlexer.Lexer{Data: data}
    result = parseMap(&r)

    for key, value := range result {
        fmt.Printf("%s : %v\n", key, value)
    }
}

func parseMap(r *jlexer.Lexer) map[string]interface{} {
    result := map[string]interface{}{}
    for {
        key := r.String()
        r.WantColon()
        switch r.PeekToken() {
        case '{':
            r.Discard()
            result[key] = parseMap(r)
            if r.PeekToken() == '}' {
                r.Discard()
            }
        case '[':
            r.Discard()
            result[key] = parseArray(r)
            if r.PeekToken() == ']' {
                r.Discard()
            }
        case jlexer.Int:
            result[key] = r.Int()
        case jlexer.String:
            result[key] = r.String()
        case jlexer.Null:
            result[key] = nil
        case jlexer.True:
            result[key] = true
        case jlexer.False:
            result[key] = false
        default:
            panic("unrecognizable JSON format")
        }
        if r.PeekToken() == ',' {
            r.Discard()
        } else {
            break
        }
    }
    return result
}

func parseArray(r *jlexer.Lexer) []interface{} {
    result := []interface{}{}
    for {
        switch r.PeekToken() {
        case '{':
            r.Discard()
            result = append(result, parseMap(r))
            if r.PeekToken() == '}' {
                r.Discard()
            }
        case '[':
            r.Discard()
            result = append(result, parseArray(r))
            if r.PeekToken() == ']' {
                r.Discard()
            }
        case jlexer.Int:
            result = append(result, r.Int())
        case jlexer.String:
            result = append(result, r.String())
        case jlexer.Null:
            result = append(result, nil)
        case jlexer.True:
            result = append(result, true)
        case jlexer.False:
            result = append(result, false)
        default:
            panic("unrecognizable JSON format")
        }
        if r.PeekToken() == ',' {
            r.Discard()
        } else {
            break
        }
    }
    return result
}

Dalam kod di atas, kami mentakrifkan struktur bernama Person untuk mewakili JSON The data dalam rentetan. Kami kemudian mencipta rentetan JSON dalam format yang mudah dibaca.

Dalam fungsi utama, kami menggunakan jlexer.Lexer untuk menghantar data JSON ke fungsi parseMap dan menyimpan hasilnya dalam hasil pembolehubah jenis peta. Akhir sekali, kami mencetak kandungan pasangan nilai kunci dalam peta.

Dalam contoh ini, kami menulis tangan parseMap fungsi yang menyahkod rentetan JSON. Fungsi ini membaca JSONLexer dan memanggil dirinya secara rekursif untuk menghuraikan rentetan JSON. Akhirnya, ia mengembalikan objek peta hasil yang dihuraikan.

Menggunakan penyahkod yang disediakan oleh easyjson boleh menghuraikan struktur JSON yang kompleks dengan mudah, tetapi apabila sejumlah besar data perlu dinyahkodkan ke dalam peta, kecekapan penghuraian mungkin berkurangan.

Kesimpulan

Terdapat banyak cara untuk menukar data JSON kepada peta dalam Golang. Pustaka standard menyediakan json.Unmarshal, yang boleh terus menyahkod data JSON ke dalam peta. Pustaka pihak ketiga easyjson menyediakan penyelesaian yang lebih cekap, tetapi memerlukan lebih banyak persediaan dan konfigurasi.

Pilih penyelesaian yang sesuai berdasarkan situasi. Jika anda hanya perlu menyahkod rentetan JSON yang mudah, anda boleh menggunakan perpustakaan standard jika anda perlu menyahkod sejumlah besar data atau struktur yang lebih kompleks, anda boleh menggunakan pustaka pihak ketiga easyjson.

Atas ialah kandungan terperinci Cara menukar data JSON kepada jenis peta dalam golang. 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