2017-02-16 7 views
0

Im Yaml MapSliceデータ構造の使い方が混乱しています。そのここhttps://sourcegraph.com/go/gopkg.in/yaml.v2/-/MapSliceから私はmapsliceの種類にアンマーシャリングするために管理していますが1つのマップを逃したので、あなたは、あなたの都市の種類を変更する必要がどのように自分自身の構造体にマップするYaml MapSlice:マーシャルまたはアンマーシャリング時にシーケンスを保存する

var data = ` 
id: 
    id-jakut: 
    en: 
     name: North Jakarta City 
     label: North Jakarta 
    id: 
     name: Kota Jakarta Utara 
     label: Jakarta Utara 
    id-jaksel: 
    en: 
     name: South Jakarta City 
     label: South Jakarta 
    id: 
     name: Kota Jakarta Selatan 
     label: Jakarta Selatan 
tw: 
    tw-tp: 
    en: 
     name: Taipei City 
     label: Taipei 
    zh-TW: 
     name: 台北 
     label: 台北市 
    tw-ntp: 
    en: 
     name: New Taipei City 
     label: New Taipei City 
    zh-TW: 
     name: 新北市 
     label: 新北市 
` 

type cityLocale struct { 
    Name string `yaml:"name,flow"` 
    Label string `yaml:"label,flow"` 
} 

type cityLocales map[string]cityLocale 
type cities map[string]cityLocales 
type countryCities map[string]cities 

func main() { 
    m := yaml.MapSlice{} 
    err := yaml.Unmarshal([]byte(data), &m) 
    if err != nil { 
     log.Fatalf("error: %v", err) 
    } 
    fmt.Printf("MAPSLICE==>%+v\n\n", m)  

    t := countryCities{} 
    err = yaml.Unmarshal([]byte(data), &t) 
    if err != nil { 
     log.Fatalf("error: %v", err) 
    } 
    fmt.Printf("NORMAL==>%+v\n", t["tw"]) 

} 
+0

あなたは順序を保持する方法を尋ねていますが、構造は順序付けられていません。あなたはMapSliceを何のために使いたいですか?あなたの都市構造はYAMLとは違う構造なので機能しません。 – JimB

+0

Okie私は構造体を今すぐ固定しました。はい、シーケンスを保持する方法。 mをtや他の方法でマップする必要がありますか? –

答えて

0

。あなたの都市が文字列の地図である場合、コードは次のように動作します:

type cities map[string]map[string]cityLocales 
+0

こんにちは、申し訳ありませんが明確ではありません。はい、私はその部分を見逃しましたが、本当の問題は、どのように非マーシャリング中に注文を保存することができる、 –

+0

マップは決して注文されていません。したがって、マップの順序を保持することはできません。あなたができる唯一のことは、スライスを使用することです。これにはオーダーがあります。 yamlの定義を知っていれば、リスト上のすべてのオブジェクトを定義することができます。その構造をスライスに非整列化することができます。 – apxp

関連する問題