- 在java中可利用snakeyaml库进行yaml与json配置文件格式互转,原理就是yaml解析为map对象,再将ma对象p转为json,反之亦然
- 本文重点介绍yaml文件的解析
- golang中比较流行的yaml.v2提供了对yaml配置文件的操作,encoding/json库提供了对json配置文件的操作,但比较繁琐的是可能需要在代码中定义对应配置文件结构的struct结构来存储解析结构,缺少灵活度。但也可以利用Unmarshal、marshal来直接解析成map存储。
- 将yaml配置内容解析到map对象中
package main
import (
"fmt"
"log"
"gopkg.in/yaml.v2"
"io/ioutil"
)
func main() {
t := map[string]interface{}{}
buffer, err := ioutil.ReadFile("./config.dev.yaml")
err = yaml.Unmarshal(buffer, &t)
if err != nil {
log.Fatalf(err.Error())
}
fmt.Printf("%v",t)
}
- 理论上可以利用yaml.v2将yaml转为map,再将map转为json,但是golang的类型转换实在恶心...
- yaml配置文件转json格式。这里需要另一个库https://github.com/ghodss/yaml
# 安装
go get -u github.com/ghodss/yaml
# 使用
package main
import (
"fmt"
"github.com/ghodss/yaml"
)
func main() {
j := []byte(`{"name": "John", "age": 30}`)
y, err := yaml.JSONToYAML(j)
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
fmt.Println(string(y))
/* Output:
name: John
age: 30
*/
j2, err := yaml.YAMLToJSON(y)
if err != nil {
fmt.Printf("err: %v\n", err)
return
}
fmt.Println(string(j2))
/* Output:
{"age":30,"name":"John"}
*/
}
- 在实战中,是先调用yaml.YAMLToJSON将yaml转为json文本,再利用json.Unmarshal将json文本解析为内存map。
有疑问加站长微信联系(非本文作者)