我有一个相当简单的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
答案 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 !!