„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie analysiere ich YAML-Dateien mit dynamischen Schlüsseln in Go?

Wie analysiere ich YAML-Dateien mit dynamischen Schlüsseln in Go?

Veröffentlicht am 20.11.2024
Durchsuche:594

How to Parse YAML Files with Dynamic Keys in Go?

YAML-Parsing von Go-Code mit dynamischen Schlüsseln

Um Go-Code in einer YAML-Datei zu parsen, die dynamische Schlüssel enthält, befolgen Sie diese Schritte:

1. Installieren Sie Yaml Bibliothek:

go get gopkg.in/yaml.v2

2. Definieren Sie die Modellstruktur:
Erstellen Sie eine Struktur zur Darstellung YAML-Daten. Wenn Sie alle möglichen Schlüssel kennen, können Sie sie mithilfe regulärer Felder definieren. Andernfalls können Sie Map[string]interface{}-Felder verwenden, um dynamische Schlüssel zu enthalten.

3. Verwenden Sie einen benutzerdefinierten Unmarshaler (optional):
Wenn Sie anpassen müssen, wie YAML-Daten analysiert werden, können Sie einen benutzerdefinierten Unmarshaler verwenden. Dies kann Ihnen beim Umgang mit dynamischen Schlüsseln oder anderen komplexen Analyseszenarien helfen.

4. YAML-Daten analysieren:
Verwenden Sie die Funktion yaml.Unmarshal, um die YAML-Daten zu analysieren und in eine Modellstruktur zu deserialisieren.

Beispiel:
Das folgende Beispiel zeigt, wie eine YAML-Datei mit dynamischen Schlüsseln analysiert wird:

package main

import (
    "fmt"

    "gopkg.in/yaml.v2"
)

var data = `
---
development:
  skip-header-validation: true
  V1:
    current: "1.0.0"
    mime_types:
      - application/vnd.company.jk.identity json;
      - application/vnd.company.jk.user json;
      - application/vnd.company.jk.role json;
      - application/vnd.company.jk.scope json;
      - application/vnd.company.jk.test json;
    skip-mime-type-validation: true
    skip-version-validation: true
  V2:
    current: "2.0.0"
    mime_types:
      - application/vnd.company.jk.identity json;
      - application/vnd.company.jk.user json;
      - application/vnd.company.jk.role json;
      - application/vnd.company.jk.scope json;
      - application/vnd.company.jk.test json;

`

type MajorVersion struct {
    Current                 string   `yaml:"current"`
    MimeTypes               []string `yaml:"mime_types"`
    SkipVersionValidation  bool     `yaml:"skip-version-validation"`
    SkipMimeTypeValidation bool     `yaml:"skip-mime-type-validation"`
}

type Environment struct {
    SkipHeaderValidation bool
    Versions             map[string]MajorVersion `yaml:",inline"`
}

func main() {
    e := map[string]Environment{}
    if err := yaml.Unmarshal([]byte(data), &e); err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("%#v\n", e)
}

Ausgabe:

map[string]main.Environment{
    "development": {
        SkipHeaderValidation: true,
        Versions: {
            "V1": {
                Current:                "1.0.0",
                MimeTypes:              {"application/vnd.company.jk.identity json;", "application/vnd.company.jk.user json;", "application/vnd.company.jk.role json;", "application/vnd.company.jk.scope json;", "application/vnd.company.jk.test json;"},
                SkipVersionValidation:  true,
                SkipMimeTypeValidation: true,
            },
            "V2": {
                Current:                "2.0.0",
                MimeTypes:              {"application/vnd.company.jk.identity json;", "application/vnd.company.jk.user json;", "application/vnd.company.jk.role json;", "application/vnd.company.jk.scope json;", "application/vnd.company.jk.test json;"},
                SkipVersionValidation:  false,
                SkipMimeTypeValidation: false,
            },
        },
    },
}
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3