2017-08-22 15 views
-1

私は、Goの(できれば)マップを解析するためのかなり単純なYAMLドキュメントを持っています。Golangの単純なYAMLファイルを解析するための正しい構造体の抽出

YAMLドキュメント:

--- 
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

YAMLを解析するためにどのライブラリを使用していますか? – Adrian

+0

@Adrian https://github.com/go-yaml/yaml – intellion

答えて

1

を問題は、あなたがラップによって引き起こされますYAMLにはそのようなネスティングはありません。

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

あなたは実際には直接マップ自体

EDITにアンマーシャリングすることができますハードあなたの書式を指示するが、それらの整数キーが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 
} 
+0

私が提供したYAMLサンプルにはネストはありません。残念ながら、map [string] string {}を使用して提案されている解決法は、正しく動作せず、同じエラーが発生します: 'line 1:unmarshal !! str 'A'をmap [string] string' – intellion

-1

私は実際にYAMLではない値を解析しようとしました。

関連する問題