我有下一个 yaml,如果我在在线 yaml 网站上验证它,它说它是有效的:
- {"foo": "1", "bar": "2"}
Run Code Online (Sandbox Code Playgroud)
然后,我编写一段代码来解析该值1并2从此 yaml 中解析,如下所示:
测试.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)
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,如下所示:
shubuntu1@shubuntu1:~/20210810$ go run test.go
--- configs:
{[{1 2}]}
1
2
Run Code Online (Sandbox Code Playgroud)
有什么问题?
您可以看到我在这里做了一个解决方法,接下来foobar在原始 yaml 之前添加特殊键,然后我可以用来type Configs struct解组它:
从
- foo: 1
bar: 2
Run Code Online (Sandbox Code Playgroud)
到
foobar:
- foo: 1
bar: 2
Run Code Online (Sandbox Code Playgroud)
那么,如果我不使用解决方法添加前缀foobar:,我该如何直接解析呢- {"foo": 1, "bar": 2}?
由于您的YAML数据是一个数组,因此将其解组为Config结构数组。
package main
import (
"fmt"
"gopkg.in/yaml.v2"
)
type Config struct {
Foo string
Bar string
}
func main() {
var configs []Config
var data = `
- foo: 1
bar: 2
`
err := yaml.Unmarshal([]byte(data), &configs)
if err != nil {
panic(err)
}
fmt.Println(configs)
}
Run Code Online (Sandbox Code Playgroud)
输出:
[{1 2}]
Run Code Online (Sandbox Code Playgroud)
试穿 - Go Playground
| 归档时间: |
|
| 查看次数: |
7779 次 |
| 最近记录: |