Inhaltsverzeichnis
Frageninhalt
Lösung
Heim Backend-Entwicklung Golang Ordnen Sie JSON einer Struktur mit verschachtelten Wörterbüchern zu

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

Feb 09, 2024 pm 01:46 PM
代码可读性

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

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie „Restrict' in der C-Sprache So verwenden Sie „Restrict' in der C-Sprache May 08, 2024 pm 01:30 PM

Das Schlüsselwort „restrict“ wird verwendet, um den Compiler darüber zu informieren, dass auf eine Variable nur mit einem Zeiger zugegriffen werden kann. Dadurch wird undefiniertes Verhalten verhindert, der Code optimiert und die Lesbarkeit verbessert: Verhindert undefiniertes Verhalten, wenn mehrere Zeiger auf dieselbe Variable zeigen. Um den Code zu optimieren, verwendet der Compiler das Schlüsselwort „restrict“, um den Variablenzugriff zu optimieren. Verbessert die Lesbarkeit des Codes, indem es angibt, dass auf Variablen nur mit einem Zeiger zugegriffen werden kann.

Welche Vorteile kann die Vorlagenprogrammierung bringen? Welche Vorteile kann die Vorlagenprogrammierung bringen? May 08, 2024 pm 05:54 PM

Die Programmierung mit Vorlagen verbessert die Codequalität, weil sie: die Lesbarkeit verbessert: sich wiederholenden Code kapselt und so das Verständnis erleichtert. Verbesserte Wartbarkeit: Ändern Sie einfach die Vorlage, um Datentypänderungen zu berücksichtigen. Optimierungseffizienz: Der Compiler generiert optimierten Code für bestimmte Datentypen. Fördern Sie die Wiederverwendung von Code: Erstellen Sie gemeinsame Algorithmen und Datenstrukturen, die wiederverwendet werden können.

Wie objektrelationale Mapping- und Datenbankabstraktionsschichten von PHP die Lesbarkeit des Codes verbessern Wie objektrelationale Mapping- und Datenbankabstraktionsschichten von PHP die Lesbarkeit des Codes verbessern May 06, 2024 pm 06:06 PM

Antwort: ORM (Object Relational Mapping) und DAL (Database Abstraction Layer) verbessern die Lesbarkeit des Codes, indem sie die zugrunde liegenden Details der Datenbankimplementierung abstrahieren. Detaillierte Beschreibung: ORM verwendet einen objektorientierten Ansatz zur Interaktion mit der Datenbank und bringt den Code näher an die Anwendungslogik. DAL bietet eine gemeinsame Schnittstelle, die unabhängig von Datenbankanbietern ist und die Interaktion mit verschiedenen Datenbanken vereinfacht. Durch die Verwendung von ORM und DAL kann die Verwendung von SQL-Anweisungen reduziert und der Code prägnanter gestaltet werden. In der Praxis können ORM und DAL die Abfrage von Produktinformationen vereinfachen und die Lesbarkeit des Codes verbessern.

Benennungsprinzipien für C++-Funktionen: Wie kann man dafür sorgen, dass Funktionsnamen den Spezifikationen entsprechen? Benennungsprinzipien für C++-Funktionen: Wie kann man dafür sorgen, dass Funktionsnamen den Spezifikationen entsprechen? May 05, 2024 am 08:42 AM

Die Benennungsprinzipien von C++-Funktionen erfordern, dass Funktionsnamen das Funktionsverhalten genau beschreiben, prägnant und klar sind, Verbformen verwenden, Unterstriche vermeiden, keine Schlüsselwörter verwenden und Parameter- und Rückgabewertinformationen enthalten können. Das Befolgen dieser Grundsätze verbessert die Lesbarkeit und Wartbarkeit Ihres Codes.

Wie vereinfachen neue Features von PHP-Funktionen den Entwicklungsprozess? Wie vereinfachen neue Features von PHP-Funktionen den Entwicklungsprozess? May 04, 2024 pm 09:45 PM

Die neuen Funktionen von PHP-Funktionen vereinfachen den Entwicklungsprozess erheblich, darunter: Pfeilfunktion: Bietet eine prägnante anonyme Funktionssyntax, um Coderedundanz zu reduzieren. Deklaration von Eigenschaftstypen: Geben Sie Typen für Klasseneigenschaften an, verbessern Sie die Lesbarkeit und Zuverlässigkeit des Codes und führen Sie zur Laufzeit automatisch eine Typprüfung durch. Nulloperator: Prüft und verarbeitet präzise Nullwerte und kann zur Verarbeitung optionaler Parameter verwendet werden.

Die komplementäre Beziehung zwischen Dokumentationskommentaren und Namenskonventionen bei der Benennung von C++-Funktionen Die komplementäre Beziehung zwischen Dokumentationskommentaren und Namenskonventionen bei der Benennung von C++-Funktionen May 03, 2024 am 09:00 AM

Konventionen zur Benennung von Funktionen und Dokumentationskommentare in C++ ergänzen sich gegenseitig und verbessern die Lesbarkeit des Codes. Namenskonventionen sorgen für klare und konsistente Funktionsnamen, während Dokumentationskommentare Details wie Zweck, Parameter, Rückgabewerte und Vorbedingungen ergänzen und sicherstellen, dass der Code leicht zu verstehen, zu warten und zu erweitern ist.

Ist Sum ein Schlüsselwort in C -Sprache? Ist Sum ein Schlüsselwort in C -Sprache? Apr 03, 2025 pm 02:18 PM

Das SUM -Schlüsselwort existiert nicht in der C -Sprache, sondern ist eine normale Kennung und kann als Variable oder Funktionsname verwendet werden. Um Missverständnisse zu vermeiden, wird empfohlen, es für Kennungen mathematischer Codes zu vermeiden. Weitere beschreibende Namen wie Array_Sum oder Calculate_Sum können verwendet werden, um die Code -Lesbarkeit zu verbessern.

Best Practices für asynchrone und nicht blockierende Programmierung mit PHP-Funktionen? Best Practices für asynchrone und nicht blockierende Programmierung mit PHP-Funktionen? May 04, 2024 pm 10:45 PM

Best Practices weisen darauf hin, dass bei der Implementierung asynchroner und nicht blockierender Programmierung in PHP die folgenden Funktionen verwendet werden sollten: curl_multi_init() und curl_multi_exec(): cURL-Anfragen asynchron ausführen. stream_socket_client() und stream_select(): Netzwerk-Sockets asynchron einrichten und lesen. mysqli_poll(): MySQL-Abfragen asynchron ausführen.

See all articles