Bagaimanakah saya boleh mengakses kunci dan nilai JSON bersarang dalam dalam Go tanpa menggunakan pemasar tersuai dan penyahmarshaler?

DDD
Lepaskan: 2024-10-26 19:41:02
asal
411 orang telah melayarinya

How can I access deeply nested JSON keys and values in Go without using custom marshalers and unmarshalers?

Mengakses Kunci dan Nilai JSON Bersarang Dalam dalam Go

Pertimbangkan kod klien websocket berikut yang ditulis dalam Go:

import (
    "encoding/json"
    "log"
)

func main() {
    msg := `{"args":[{"time":"2013-05-21 16:56:16", "tzs":[{"name":"GMT"}]}],"name":"send:time"}`
    var u map[string]interface{}

    err := json.Unmarshal([]byte(msg), &u)
    if err != nil {
        log.Fatalf("Failed to unmarshal: %v\n", err)
    }

    args := u["args"]

    // Attempting to directly access the time key will throw an error
    log.Println(args[0]["time"]) // invalid notation
}
Salin selepas log masuk

Dalam senario ini, ralat "operasi tidak sah: args[0] (indeks antara muka jenis {})" timbul disebabkan oleh tatatanda yang tidak betul apabila mengakses kekunci "masa" bersarang dalam.

Penyelesaian

Penyelesaian yang disyorkan melibatkan penggunaan pakej github.com/bitly/go-simplejson, yang memudahkan navigasi struktur data JSON. Rujuk dokumentasi di http://godoc.org/github.com/bitly/go-simplejson untuk butiran.

Menggunakan pakej ini pada kod di atas:

// Import go-simplejson
import "github.com/bitly/go-simplejson"

func main() {
    // Create a JSON object
    json := simplejson.New()
    json.Decode([]byte(msg))

    // Using go-simplejson, access the time key
    time, err := json.Get("args").GetIndex(0).String("time")
    if err != nil {
        log.Fatalf("Failed to get time: %v\n", err)
    }

    log.Println(time) // Returns the time value
}
Salin selepas log masuk

Mengenai bahagian kedua soalan asal, mengisytiharkan struct Go akan memerlukan pemasar tersuai dan unmarshaler, yang melibatkan pelaksanaan antara muka pengekodan.TextMarshaler dan pengekodan.TextUnmarshaler. Walau bagaimanapun, menggunakan pustaka JSON seperti go-simplejson memudahkan proses ini.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengakses kunci dan nilai JSON bersarang dalam dalam Go tanpa menggunakan pemasar tersuai dan penyahmarshaler?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!