【发布时间】:2021-08-10 09:21:54
【问题描述】:
我有下一个 yaml,如果我在 online yaml website 中验证它,它说它是有效的:
- {"foo": "1", "bar": "2"}
然后,我编写了一个代码来解析这个 yaml 中的值 1 和 2,如下所示:
test.go:
package main
import "gopkg.in/yaml.v2"
import "fmt"
type Config struct {
Foo string
Bar string
}
type Configs struct {
Cfgs []Config `foobar`
}
func main() {
//var data = `
// foobar:
// - foo: 1
// bar: 2
//`
var data = `
- foo: 1
bar: 2
`
source := []byte("foobar:" + data)
var configs Configs
err := yaml.Unmarshal(source, &configs)
if err != nil {
fmt.Println("error: %v", err)
}
fmt.Printf("--- configs:\n%v\n\n", configs)
fmt.Println(configs.Cfgs[0].Foo)
fmt.Println(configs.Cfgs[0].Bar)
}
它可以像下一个一样工作:
shubuntu1@shubuntu1:~/20210810$ go run test.go
--- configs:
{[{1 2}]}
1
2
有什么问题?
你可以看到我在这里做了一个解决方法,在原始 yaml 之前添加特殊的 foobar 键,然后我可以使用 type Configs struct 来解组它:
来自
- foo: 1
bar: 2
到
foobar:
- foo: 1
bar: 2
那么,如果我不使用变通方法添加前缀foobar:,我怎么能直接解析- {"foo": 1, "bar": 2}?
【问题讨论】: