Go语言解析YAML

/ go / 没有评论 / 1758浏览

Go语言解析YAML

1 概述

YAML是"YAML Ain’t a Markup Language"(YAML不是一种置标语言)的递归缩写。YAML 以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。一个典型的 YAML 如下:

title: 小韩说课
category: go
tag:
- OOP
- GoLang

基本语法为:

参考文档:

本文介绍在 Go 语言中解析 YAML。

2. 安装 go-yaml/yaml

Go 语言中解析 YAML 最出名的应该是 go-yaml/yaml。github地址为:< https://github.com/go-yaml/yaml>

下面的命令将其安装在 GOPATH 目录中:

go get gopkg.in/yaml.v2

3 解析 YAML

yaml.Unmarshal 函数负责将 YAML 格式文本解析,演示如下:

import (
  "gopkg.in/yaml.v2"
)

// 待解析数据
yamlContent := `
field1: 小韩说课
field2:
  field3: value
  field4: [42, 1024]
`
// 存储解析数据
result := make(map[string]interface{})
// 执行解析   
err = yaml.Unmarshal([]byte(data), &result)
if err != nil {
  log.Fatalf("error: %v", err)
}
// result
// map[field1:小韩说课 field2:map[field3:value field4:[42 1024]]]

4. 构建 YAML

yaml.Marshal 函数可以利用 map 数据构建 YAML 文本,演示如下:

import (
  "gopkg.in/yaml.v2"
)

// map数据
data := map[string]interface{}{
    "field1": "小韩说课",
    "field2": map[string]interface{}{
      "field3": "value",
      "field4": []int{42, 1024}
    }
  }
text, err = yaml.Marshal(&data)
if err != nil {
  log.Fatalf("error: %v", err)
}

结果:

field1: 小韩说课
field2:
  field3: value
  field4:
  - 42
  - 1024