2017-01-27 7 views
-1

Ошибка при анализе такого типа файла yaml. Использование "yaml.v2"golang parse yaml file struct challenge

info: "abc" 

data: 
    source: http://intra 
    destination: /tmp 

run: 
    - id: "A1" 
    exe: "run.a1" 
    output: "output.A1" 

    - id: "A2" 
    exe: "run.a2" 
    output: "output.A2" 

Я хотел бы получить все значения из файла YAML поэтому у меня есть базовая-структура, как этот

type Config struct { 
    Info string 
    Data struct { 
    Source string `yaml:"source"` 
    Destination string `yaml:"destination"` 
    } 
} 

Это работает

Но, я не знаю, как настройте структуру для «run». Дополнительный слой меня смущает.

type Run struct { 
... 
} 
+0

Ваш пример YAML файл не является действительным, и ошибка причина использования YAML парсер Ruby. вы предполагаете что-то вроде '{" run ": [{" id ":" A1 "," exe ":" run.a1 "," output ":" output.A1 "}, {" id ":" A2 " , ...}]} 'в JSON? – ymonad

+0

фиксированный оригинал вопрос – NinjaGaiden

ответ

1

Недопустимый пример OP для YAML. Когда значение run является список словаря должно быть что-то вроде этого:

info: "abc" 

data: 
    source: http://intra 
    destination: /tmp 

run: 
    - id: "A1" 
    exe: "run.a1" 
    output: "output.A1" 

    - id: "A2" 
    exe: "run.a2" 
    output: "output.A2" 

А вот соответствующие Struture данные, и пример для декодирования YAML в структуре golang в.

package main 

import (
    "fmt" 
    "io/ioutil" 
    "os" 

    yaml "gopkg.in/yaml.v2" 
) 

type Config struct { 
    Info string 
    Data struct { 
     Source  string 
     Destination string 
    } 
    Run []struct { 
     Id  string 
     Exe string 
     Output string 
    } 
} 

func main() { 
    var conf Config 
    reader, _ := os.Open("example.yaml") 
    buf, _ := ioutil.ReadAll(reader) 
    yaml.Unmarshal(buf, &conf) 
    fmt.Printf("%+v\n", conf) 
} 

работает этот выход (добавлен некоторый отступ для удобства чтения):

{Info:abc 
Data:{Source:http://intra Destination:/tmp} 
Run:[{Id:A1 Exe:run.a1 Output:output.A1} 
     {Id:A2 Exe:run.a2 Output:output.A2}] 
+0

@NinjaGaiden иногда это зависит от того, кто будет :). +1 для вас. – jfly

+0

Спасибо. Я надеюсь, что его солнечный сегодня – NinjaGaiden

+0

Как извлечь, идентификатор A1, exe и вывод? То же самое для A2? – NinjaGaiden