Heim > Backend-Entwicklung > Golang > Schlüssel/Wert-Paare können nicht aus der über YAML erhaltenen Karte extrahiert werden

Schlüssel/Wert-Paare können nicht aus der über YAML erhaltenen Karte extrahiert werden

王林
Freigeben: 2024-02-08 23:40:29
nach vorne
390 Leute haben es durchsucht

无法从通过 YAML 获取的映射中提取键/值对

Der PHP-Editor Xiaoxin stößt häufig auf ein Problem, wenn er YAML zum Abrufen von Zuordnungen verwendet. Das heißt, die Schlüssel/Wert-Paare können nicht aus der über YAML erhaltenen Zuordnung extrahiert werden. Dieses Problem tritt in der tatsächlichen Entwicklung sehr häufig auf und kann dazu führen, dass die Konfigurationsdatei nicht richtig gelesen werden kann oder die richtigen Daten nicht abgerufen werden können. In diesem Artikel werden wir uns mit der Ursache dieses Problems befassen und einige Lösungen bereitstellen, die Entwicklern dabei helfen, Schlüssel/Wert-Paare bei der Verwendung von YAML reibungsloser zu extrahieren.

Frageninhalt

Ich verwende das Goldmark-Meta-Paket, um Yaml-Dateien zu lesen. Was mich interessiert, ist Folgendes In Yaml:

burger:
- a: ay
- b: bee
- c: see
Nach dem Login kopieren

Ich möchte auf Schlüssel und Werte zugreifen Zurück zur Benutzeroberfläche: Ich stecke fest. Die Iteration gibt mir a zurück eine Liste von Schlüssel/Wert-Paaren, aber ich habe keine Ich weiß, wie ich an Informationen komme, wenn ich es nicht weiß Kennen Sie die wichtigsten Namen im Voraus. Das Programm gibt Folgendes aus:

func (c *config) burger() string {
    // c.pagefm is type map[string]interface{}
    b, ok := c.pagefm["burger"].([]interface{})
    if !ok {
    // no burger entry  in yaml
        return ""
    }
  debug("burger list has %v items:\n%v", len(b), b)  
  debug("type: %v", reflect.typeof(b))
  for i := 0; i < len(b); i++ {
    debug("%v", b[i])
  }
 return ""
}
Nach dem Login kopieren
Burger list has 3 items:
[map[a:ay] map[b:bee] map[c:see]]
Type: []interface {}
map[a:ay]
map[b:bee]
map[c:see]
Nach dem Login kopieren

Wie erhalte ich eine Schlüssel- und Wertzeichenfolge?

Workaround

In Ihren Yaml-Daten haben Sie ein Element in einem Schlüssel (burger),其值是映射列表(每个映射都有一个键)。我们可以像这样迭代 burger:

b, ok := c.pagefm["burger"].([]interface{})
if !ok {
  return ""
}

for _, item := range burger {
  ...
}
Nach dem Login kopieren

Für jedes item können wir die verfügbaren Schlüssel und Werte durchlaufen:

for _, item := range burger {
  for k, v := range item.(map[interface{}]interface{}) {
    ...
  }
}
Nach dem Login kopieren

Wir können fmt.sprintfinterface{} 中的键和值转换为 string:

verwenden
for _, item := range burger {
  for k, v := range item.(map[interface{}]interface{}) {
    k_str := fmt.sprintf("%v", k)
    v_str := fmt.sprintf("%v", v)

    fmt.printf("key %s value %s\n", k_str, v_str)
  }
}
Nach dem Login kopieren

Ausgehend mit dem Beispielcode goldmark-meta von habe ich dieses Beispiel zusammengestellt:

package main

import (
    "bytes"
    "fmt"

    "github.com/yuin/goldmark"
    meta "github.com/yuin/goldmark-meta"
    "github.com/yuin/goldmark/parser"
)

func main() {
    markdown := goldmark.new(
        goldmark.withextensions(
            meta.meta,
        ),
    )
    source := `---
burger:
- a: ay
- b: bee
- c: see
---

# hello goldmark-meta
`

    var buf bytes.buffer
    context := parser.newcontext()
    if err := markdown.convert([]byte(source), &buf, parser.withcontext(context)); err != nil {
        panic(err)
    }
    metadata := meta.get(context)
    burger := metadata["burger"].([]interface{})
    for _, item := range burger {
        for k, v := range item.(map[interface{}]interface{}) {
            k_str := fmt.sprintf("%v", k)
            v_str := fmt.sprintf("%v", v)
            fmt.printf("key %s value %s\n", k_str, v_str)
        }
    }
}
Nach dem Login kopieren

Was ergibt:

key a value ay
key b value bee
key c value see
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSchlüssel/Wert-Paare können nicht aus der über YAML erhaltenen Karte extrahiert werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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