2017-01-27 1 views
-1

yaml 파일의 이런 종류의 파싱에 문제가 있습니다. "yaml.v2"골란 구문 분석 yaml 파일 구조체

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 파서를 사용하여. 당신은 {{ "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" 

및 여기 golang의 구조로 YAML를 디코딩하기위한 해당 데이터 struture, 그리고 예.

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

(가독성을 위해 일부 들여 쓰기를 추가)이 출력됩니다 실행 : YAML 파일의

{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

id A1 's, exe 및 output은 어떻게 추출합니까? A2와 동일합니까? – NinjaGaiden