找出正确的结构来解析Golang中的简单YAML文件

时间:2017-08-22 17:52:48

标签: go yaml

我有一个相当简单的YAML文档,用于解析Go中的(最好)地图。

YAML doc:

---
A: Logon
'0': Heartbeat
'1': Test Request
'2': Resend Request
'3': Reject
'4': Sequence Reset
'5': Logout
'8': Execution Report
S: Quote
AE: Trade Capture Report
B: News
h: Trading Session Status
f: Security Status

我试图用

编组
type TranslationVal struct {
    Map map[string]string
}

translationVal := TranslationVal{}
err := yaml.Unmarshal([]byte(val), &translationVal)

但是我得到了:

2017/08/22 20:33:23 yaml: unmarshal errors:   line 1: cannot unmarshal !!str `A` into main.TranslationVal

2 个答案:

答案 0 :(得分:1)

问题是由您将地图包装在对象中引起的,YAML没有这样的嵌套。

map := map[string]string{}
err := yaml.Unmarshal([]byte(val), &map)

你实际上可以直接解组到地图本身

编辑:很难说你的格式,但如果这些整数键嵌套在A下,那么你将需要一个不同的结构,它实际上是map[string]map[string]string - 但这是相当的丑陋,所以我建议在那时转向另一种范式......你可以使用一个map[string]interface{},它不关心什么类型进入地图然后你可以稍后处理它,或者你可以更静态地定义对象,在结构中使用实际的键A来表示每个项目的去向,如果是这样的话,你有一个像下面这样的对象;

type TranslationVal struct {
    A map[string]string
    B string
    C string
    // and so on
    F string `yaml:f` // necessary because f would be unexported
}

答案 1 :(得分:-1)

我实际上试图解析一个根本不是YAML的值,doh !!