Petakan json kepada struktur dengan kamus bersarang

WBOY
Lepaskan: 2024-02-09 13:46:23
ke hadapan
1103 orang telah melayarinya

将 json 映射为具有嵌套字典的结构

php Editor Strawberry Memetakan json ke dalam struktur dengan kamus bersarang ialah kaedah pemprosesan data yang biasa. Dengan menukar data json kepada kamus bersarang, kami boleh mengendalikan dan mengakses data dengan lebih mudah. Struktur kamus bersarang boleh menyediakan cara yang lebih fleksibel untuk mengatur data, membolehkan kami memproses struktur data yang kompleks dengan lebih cekap. Dalam aplikasi praktikal, memetakan json ke kamus bersarang boleh membantu kami memahami dan memproses data dengan lebih baik, serta meningkatkan kebolehbacaan dan kebolehselenggaraan kod. Sama ada memproses data json yang dikembalikan oleh API atau menghuraikan fail konfigurasi, memetakan json kepada kamus bersarang ialah teknik pemprosesan data yang biasa.

Isi soalan

Saya baru kenal golang. Saya mempunyai fail json dengan struktur bersarang yang ingin saya huraikan dan isikan.

Saya cuba menggunakan struktur peta untuk mencuba dan mengisi. Saya dapat melakukan ini dengan struktur mudah. Tetapi apabila ia datang kepada tatasusunan kamus (kunci: struct). map[string]接口{} 似乎因 runtime 错误而失败:索引超出范围.

Saya cuba melakukan perkara berikut dengan contoh json di bawah.

type window struct {
    loc    []int
    wrtc   string
    label  string
}

type view struct {
    windows   []window
}

type views struct {
    views []view
}

type desktop struct {
    views                 []views  `mapstructure:views`
    rotation_speed        string   `mapstructure:"rotationspeed" json:rotationspeed"`
}

func main() {
        file, _ := ioutil.readfile("test.json")

        data := desktop{}

        _ = json.unmarshal([]byte(file), &data)

        fmt.println("data: ", data.views[0])
}
Salin selepas log masuk
{
"desktop": {
    "view": [{// configs for view1
                 "random_id1": {
                         "loc": [0,0,640,360],
                         "wrtc": "some string",
                         "label": "window 1"
                 },
                 "random_id213443": {
                         "loc": [640,360,1280,720],
                         "wrtc": "some string blah",
                         "label": "window 2"
                 },
                 // more windows with random ids....
              },
              {
               // configs for view2...
              }
             ],
    "rotationSpeed": 30
}
Salin selepas log masuk

Memandangkan id tetingkap adalah rawak, saya tidak dapat menentukannya dalam struct. Saya cuba menggunakan mapstruct:",squash" tetapi itu nampaknya gagal juga.

Terima kasih banyak atas sebarang bantuan yang anda boleh berikan.

Penyelesaian

@burak serdar betul

Anda tidak memerlukan struktur peta. json unmarshalling boleh menyelesaikan masalah ini.

Terdapat banyak ralat dalam kod anda, seperti struktur, huruf besar, "pandangan", dsb.

Berikut ialah demo:

package main

import (
    "encoding/json"
    "fmt"
)

var data = `
{
    "desktop":{
        "view":[
            {
                "random_id1_1":{
                    "loc":[
                        0,
                        0,
                        640,
                        360
                    ],
                    "wrtc":"some string",
                    "label":"window 1"
                },
                "random_id1_2":{
                    "loc":[
                        640,
                        360,
                        1280,
                        720
                    ],
                    "wrtc":"some string blah",
                    "label":"window 2"
                }
            },
            {
                "random_id2_1":{
                    "loc":[
                        0,
                        0,
                        640,
                        360
                    ],
                    "wrtc":"some string",
                    "label":"window 1"
                },
                "random_id2_2":{
                    "loc":[
                        640,
                        360,
                        1280,
                        720
                    ],
                    "wrtc":"some string blah",
                    "label":"window 2"
                }
            }
        ],
        "rotationspeed":30
    }
}
`

type window struct {
    loc   []int
    wrtc  string
    label string
}

type desktop struct {
    view           []map[string]window
    rotation_speed int `json:"rotationspeed" mapstructure:"rotationspeed"`
}

type config struct {
    desktop desktop
}

func main() {
    c := config{}
    json.unmarshal([]byte(data), &c)
    fmt.println("json.unmarshal: ", c)
}
Salin selepas log masuk
json.unmarshal:  {{[map[random_id1_1:{[0 0 640 360] some string window 1} random_id1_2:{[640 360 1280 720] some s
tring blah window 2}] map[random_id2_1:{[0 0 640 360] some string window 1} random_id2_2:{[640 360 1280 720] some
 string blah window 2}]] 30}}
Salin selepas log masuk

Jika anda mahukan struktur view, anda juga boleh menggunakan mapstruct melalui "kekal"

type Window struct {
    Loc   []int
    Wrtc  string
    Label string
}

type View struct {
    Windows map[string]Window `mapstructure:",remain"`
}

type Desktop struct {
    View           []View
    Rotation_speed int `json:"rotationSpeed" mapstructure:"rotationSpeed"`
}

type Config struct {
    Desktop Desktop
}

func main() {
    c2 := Config{}
    m := map[string]interface{}{}
    _ = json.Unmarshal([]byte(data), &m)
    mapstructure.Decode(m, &c2)
    fmt.Println("mapstructure: ", c2)
}
Salin selepas log masuk

Atas ialah kandungan terperinci Petakan json kepada struktur dengan kamus bersarang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
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!