Jadual Kandungan
Isi soalan
Penyelesaian
Rumah pembangunan bahagian belakang Golang Petakan json kepada struktur dengan kamus bersarang

Petakan json kepada struktur dengan kamus bersarang

Feb 09, 2024 pm 01:46 PM
kebolehbacaan kod

将 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!

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

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.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

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)

Parameter lalai dalam pengisytiharan fungsi C++: analisis komprehensif tentang pengisytiharan dan penggunaannya Parameter lalai dalam pengisytiharan fungsi C++: analisis komprehensif tentang pengisytiharan dan penggunaannya May 02, 2024 pm 03:09 PM

Parameter lalai dalam C++ menyediakan keupayaan untuk menentukan nilai lalai untuk parameter fungsi, dengan itu meningkatkan kebolehbacaan kod, kesederhanaan dan fleksibiliti. Isytihar parameter lalai: Tambahkan simbol "=" selepas parameter dalam pengisytiharan fungsi, diikuti dengan nilai lalai. Penggunaan: Apabila fungsi dipanggil, jika parameter pilihan tidak disediakan, nilai lalai akan digunakan. Kes praktikal: Fungsi yang mengira jumlah dua nombor Satu parameter diperlukan dan satu lagi adalah pilihan dan mempunyai nilai lalai 0. Kelebihan: Kebolehbacaan yang dipertingkatkan, peningkatan fleksibiliti, pengurangan kod plat dandang. Nota: Ia hanya boleh dinyatakan dalam pengisytiharan, ia mestilah pada penghujungnya, dan jenisnya mestilah serasi.

Cara menggunakan restrict dalam bahasa c Cara menggunakan restrict dalam bahasa c May 08, 2024 pm 01:30 PM

Kata kunci sekatan digunakan untuk memaklumkan pengkompil bahawa pembolehubah hanya boleh diakses oleh penuding, menghalang gelagat yang tidak ditentukan, mengoptimumkan kod dan meningkatkan kebolehbacaan: Menghalang gelagat yang tidak ditentukan apabila berbilang penunjuk menghala ke pembolehubah yang sama. Untuk mengoptimumkan kod, pengkompil menggunakan kata kunci had untuk mengoptimumkan akses berubah-ubah. Meningkatkan kebolehbacaan kod dengan menunjukkan bahawa pembolehubah hanya boleh diakses dengan penuding.

Apakah faedah yang boleh dibawa oleh pengaturcaraan templat? Apakah faedah yang boleh dibawa oleh pengaturcaraan templat? May 08, 2024 pm 05:54 PM

Pengaturcaraan templat meningkatkan kualiti kod kerana ia: Meningkatkan kebolehbacaan: Merangkum kod berulang, menjadikannya lebih mudah untuk difahami. Kebolehselenggaraan yang dipertingkatkan: Hanya tukar templat untuk menampung perubahan jenis data. Kecekapan pengoptimuman: Pengkompil menjana kod yang dioptimumkan untuk jenis data tertentu. Galakkan penggunaan semula kod: Buat algoritma biasa dan struktur data yang boleh digunakan semula.

Bagaimana pemetaan hubungan objek PHP dan lapisan abstraksi pangkalan data meningkatkan kebolehbacaan kod Bagaimana pemetaan hubungan objek PHP dan lapisan abstraksi pangkalan data meningkatkan kebolehbacaan kod May 06, 2024 pm 06:06 PM

Jawapan: ORM (Pemetaan Hubungan Objek) dan DAL (Lapisan Abstraksi Pangkalan Data) meningkatkan kebolehbacaan kod dengan mengabstraksikan butiran pelaksanaan pangkalan data yang mendasari. Penerangan terperinci: ORM menggunakan pendekatan berorientasikan objek untuk berinteraksi dengan pangkalan data, membawa kod lebih dekat dengan logik aplikasi. DAL menyediakan antara muka biasa yang bebas daripada vendor pangkalan data, memudahkan interaksi dengan pangkalan data yang berbeza. Menggunakan ORM dan DAL boleh mengurangkan penggunaan pernyataan SQL dan menjadikan kod lebih ringkas. Dalam kes praktikal, ORM dan DAL boleh memudahkan pertanyaan maklumat produk dan meningkatkan kebolehbacaan kod.

Apakah kegunaan ref dalam vue? Apakah kegunaan ref dalam vue? May 02, 2024 pm 08:39 PM

Rujukan dalam Vue.js digunakan untuk mewujudkan rujukan antara templat dan kod JavaScript untuk: mengakses elemen DOM atau tika komponen mendengar peristiwa DOM secara dinamik mencipta DOM dan menyepadukan dengan perpustakaan pihak ketiga

Apakah amalan terbaik untuk menulis dokumentasi fungsi Golang? Apakah amalan terbaik untuk menulis dokumentasi fungsi Golang? Apr 30, 2024 pm 04:27 PM

Amalan terbaik untuk menulis dokumentasi fungsi Go: Gunakan ulasan GoDoc untuk membenamkan dokumen dan menulis ringkasan deskriptif, termasuk tujuan, jenis dan nilai yang dijangkakan dokumentasi hasil, menerangkan jenis, nilai yang dijangkakan dan maksud; , menunjukkan penggunaan fungsi kod ujian di GoPlayground untuk memastikan ketepatan.

Mengapa tiada fungsi lebihan beban dalam golang? Mengapa tiada fungsi lebihan beban dalam golang? Apr 30, 2024 am 10:54 AM

Lebihan muatan fungsi tidak dibenarkan dalam bahasa Go atas sebab-sebab berikut: Permudahkan pelaksanaan pengkompil Tingkatkan kebolehbacaan kod dan elakkan konflik nama Dalam Go, anda boleh menggunakan senarai atau antara muka parameter berubah-ubah untuk mencapai tingkah laku yang serupa dengan lebihan fungsi.

Apakah maksud @ dalam sql? Apakah maksud @ dalam sql? May 02, 2024 am 12:06 AM

Simbol @ dalam SQL digunakan untuk menentukan parameter pembolehubah dalam pertanyaan, yang berguna untuk meningkatkan kebolehbacaan kod, mencegah serangan suntikan SQL dan meningkatkan prestasi. Sintaks: @parameter_name, dengan parameter_name ialah nama parameter.

See all articles