Я пытаюсь разобрать файл yaml с go. Проблема в том, что ключи в файле yaml могут быть не всегда одинаковыми. Это должно быть сделано для версии API, чтобы пользователь мог определить версии, которые они поддерживают. Например V1, V2, V3 и т.д. Они не должны быть в порядке и можно опустить версии они не поддерживают IE V0, V2, V5 и т.д.Как разобрать yaml с dyanmic ключом в Golang
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 `yaml:"skip-header-validation"`
Version map[string]MajorVersion
}
func main() {
e := Environment{}
yaml.Unmarshal([]byte(data), &e)
fmt.Println(e)
}
Я видел подобный вопрос, заданный здесь Golang parse a json with DYNAMIC key Это на верхнем уровне и не совсем понял, как это сделать изнутри структуры.
Wow очень хороший человек, Thnx. Очень здорово видеть, как это делается в режиме go. Забавно, сколько кода вам нужно иногда просто разбирать yaml! – earlonrails