golang yaml與json配置檔案互
摘要:
在java中可利用snakeyaml庫進行yaml與json配置檔案格式互轉,原理就是yaml解析為map物件,再將ma物件p轉為json,反之亦然
本文重點介紹yaml檔案的解析
golang中比較流行的yaml.v2提供了對yaml配置檔案的操作,encoding...
- 在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格式。這裡需要另一個庫ofollow,noindex">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。