Golang yaml.v2 将数组编码为序列

标签 go yaml marshalling unmarshalling

给定以下 YAML:

array.test: ["val1", "val2", "val3"]

我使用 gopkg.in/yaml.v2 将其解编为 map[string]interface{}。然后我得到一个键,其值为 3 个值的数组。

当我再次将其编码为 YAML 时,生成的 YAML 如下所示:

array.test:
- val1
- val2
- val3

数组实际上被编码为序列而不是数组。

这是完整的 GoLang 代码:

func main(){
    data := `array.test: ["val1", "val2", "val3"]`
    conf := make(map[string]interface{})
    yaml.Unmarshal([]byte(data), conf)

    data2, _ := yaml.Marshal(conf)
    fmt.Printf("%s\n", string(data2))
}

我怎样才能克服这个问题?

最佳答案

这个帮助了我和你一样的情况。

package main

import (
        "fmt"
        "log"

        "gopkg.in/yaml.v2"
)

var data = `
a: Easy!
b:
c: 2
d.test: ["d1", "d2"]
`

// Note: struct fields must be public in order for unmarshal to
// correctly populate the data.
type T struct {
    A string
    B struct {
            RenamedC int   `yaml:"c"`
            DTest        []string `yaml:"d.test,flow"`
    }
}

func main() {
    // if we use struct containing yaml encoding for yaml formated string 
    t := T{}

    err := yaml.Unmarshal([]byte(data), &t)
    if err != nil {
            log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- t after unmarshal:\n%v\n\n", t)

    d, err := yaml.Marshal(&t)
    if err != nil {
            log.Fatalf("error: %v", err)
    }
    fmt.Printf("--- t after marshal:\n%s\n\n", string(d))
}

引用:https://github.com/go-yaml/yaml

关于Golang yaml.v2 将数组编码为序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53250313/

相关文章:

go - golang 中的 DB.Query() 和 DB.Prepare()+Stmt.Query() 有什么区别

pointers - 获取指针地址并在上下文中用作唯一标识符是否安全?

kubernetes - 无法理解 YAML 文件

java - 两种不同的架构和 JAXB Marshaller

go - 在 Kubernetes 上安装证书

bufio 包中的 golang Writer.Write() 与 ioutil 包中的 WriteFile()

yaml - 选择具有特定扩展名的所有文件 Github 操作工作流程

docker - Kubernetes:管理环境配置

c# - 编码结构数组指针的最佳方法

c# - 使用 ParameterBuilder 将自定义属性添加到返回值;反射时属性不显示——为什么?