Ordnen Sie JSON einer Struktur mit verschachtelten Wörterbüchern zu

WBOY
Freigeben: 2024-02-09 13:46:23
nach vorne
1104 Leute haben es durchsucht

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

php Editor Strawberry Mapping von JSON in eine Struktur mit verschachtelten Wörterbüchern ist eine gängige Datenverarbeitungsmethode. Durch die Konvertierung von JSON-Daten in ein verschachteltes Wörterbuch können wir die Daten bequemer bedienen und darauf zugreifen. Die Struktur verschachtelter Wörterbücher kann eine flexiblere Möglichkeit zur Datenorganisation bieten und es uns ermöglichen, komplexe Datenstrukturen effizienter zu verarbeiten. In praktischen Anwendungen kann uns die Zuordnung von JSON zu verschachtelten Wörterbüchern dabei helfen, Daten besser zu verstehen und zu verarbeiten sowie die Lesbarkeit und Wartbarkeit des Codes zu verbessern. Unabhängig davon, ob von APIs zurückgegebene JSON-Daten verarbeitet oder Konfigurationsdateien analysiert werden, ist die Zuordnung von JSON zu verschachtelten Wörterbüchern eine gängige Datenverarbeitungstechnik.

Frageninhalt

Ich bin neu bei Golang. Ich habe eine JSON-Datei mit einer verschachtelten Struktur, die ich analysieren und füllen möchte.

Ich versuche, eine Kartenstruktur zum Ausfüllen zu verwenden. Dies gelang mir mit einfachen Strukturen. Aber wenn es um das Wörterbucharray (Schlüssel: Struktur) geht. map[string]接口{} 似乎因 runtime 错误而失败:索引超出范围.

Ich habe versucht, Folgendes mit dem JSON-Beispiel unten zu tun.

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])
}
Nach dem Login kopieren
{
"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
}
Nach dem Login kopieren

Da die Fenster-ID zufällig ist, kann ich sie nicht in der Struktur definieren. Ich habe es mit mapstruct:",squash" versucht, aber auch das schien fehlgeschlagen zu sein.

Vielen Dank für jede Hilfe, die Sie leisten können.

Lösung

@burak serdar hat recht

Sie benötigen keine Kartenstruktur. JSON-Unmarshalling kann dieses Problem lösen.

Ihr Code enthält viele Fehler, z. B. Struktur, Groß- und Kleinschreibung, „Ansichten“ usw.

Hier ist die 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)
}
Nach dem Login kopieren
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}}
Nach dem Login kopieren

Wenn Sie eine view Struktur wünschen, können Sie Mapstruct auch über „remain“ verwenden

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)
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonOrdnen Sie JSON einer Struktur mit verschachtelten Wörterbüchern zu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!