我正在尝试编写一个函子以从yaml文件中获取值的所有路径,但我不知道怎么可能,这是我的代码:
func getpath(fileyaml) string {
if _, err := os.Stat(fileyaml); err == nil {
bfile, err := ioutil.ReadFile(fileyaml)
bjson, err := yaml.YAMLToJSON(bfile)
if err != nil {
fmt.Printf("YAMLToJSON err: %v\n", err)
}
json := string(bjson)
println json
paths := ? // don't know
return path
这是我的yaml文件:
sentinel:
number: 3
server:
number: 7
config:
fere_size: 5
lcmea:
eza_ze: all
我的函数会将其转换为json:{"config":{"fere_size":5},"lcmea":{"eza_hooks":"all"},"sentinel":{"number":3},"server":{"number":7}}
我想要的输出:
sentinel.number=3, server.number=3,config.fere_size=5,lcmea.eza_ze=all
如何解析此json以获得所需的输出?
我正在使用“ github.com/tidwall/gjson”读取Yaml并将其转换为json
答案 0 :(得分:0)
这是您如何执行此操作的示例:https://play.golang.org/p/7yLq_PDLdXF
这很幼稚,肯定可以改进,但是它可以使您了解如何解析yaml
文件,然后以所需的格式打印输出:
package main
import (
"fmt"
"log"
"strings"
"github.com/go-yaml/yaml"
)
var data = `
sentinel:
number: 3
server:
number: 7
config:
fere_size: 5
lcmea:
eza_ze: all
`
func main() {
m := make(map[string]map[string]interface{})
err := yaml.Unmarshal([]byte(data), &m)
if err != nil {
log.Fatalf("error: %v", err)
}
out := []string{}
for k, v := range m {
for j, i := range v {
out = append(out, fmt.Sprintf("%s.%v=%v", k, j, i))
}
}
fmt.Println(strings.Join(out, ", "))
}
它将返回:
$ go run main.go
sentinel.number=3, server.number=7, config.fere_size=5, lcmea.eza_ze=all
它正在使用https://github.com/go-yaml/yaml,请在README.md
上查看更多示例