2017-05-05 3 views
0

Ich versuche, YAML für eine Datenstruktur zu schreiben, die sowohl ein int als auch eine Liste von Zeichenfolgen ist. Aber ich habe Probleme, die Datenstruktur und die YAML-Zeichenfolge zu finden. zBUnmarshal YAML Map verschachtelt mit Liste

package main 

import (
    "fmt" 
    "log" 

    yaml "gopkg.in/yaml.v2" 
) 

type ThingAndGroups struct { 
    Groups []string 
    Value int 
} 

var someStr = ` 
thing1: 
    Groups: 
    - g1 
    - g2 
    Value: 
    5 
` 

func main() { 
    t := make(map[string]ThingAndGroups) 

    err := yaml.Unmarshal([]byte(someStr), &t) 
    if err != nil { 
     log.Fatalf("error: %v", err) 
    } 
    fmt.Printf("--- t:\n%v\n\n", t) 
} 

Returns

map [thing1: {[] 0}]

Wie erhalte ich thing1 eine Liste von Strings zu sein?

Antwort

1

Ihre Art zu dieser

ändern
type ThingAndGroups struct { 
    Groups []string `yaml:"Groups"` 
    Value int  `yaml:"Value"` 
} 

Im doc für https://godoc.org/gopkg.in/yaml.v2#Marshal sagt es

Struct Felder nur entordnet sind, wenn sie (eine obere Fall Anfangsbuchstaben) exportiert werden, und sind entordnet Verwenden des Feldnamens als Standardschlüssel. Benutzerdefinierte Tasten können über die „yaml“ Name im Feld Tag

Alternativ definiert werden könnten Sie Ihre yaml Eingabe ändern Kleinfelder wie value verwenden, dann würden Sie keine benutzerdefinierten Namen angeben müssen.