2011-08-24 4 views
6

YAML 파일에서 데이터를 읽으 려하지만 요소 순서를 유지해야합니다.
이 기능을 가진 perl 모듈이 있고 어떻게 할 수 있습니까? 응답에서YAML 순서 perl 유지



켄이치 내가 원하는 것을 할 관리 @mugen합니다하지만 난이 합리적인 해결책이라고 생각하지 않습니다.

된 YAML :

foo: 
    bar: some value 
    baz: other value 
qwe: 
    bar: yet another value 
    baz: again 

새로운 YAML

- 
    foo: 
     bar: some value 
     baz: other value 
- 
    qwe: 
     bar: yet another value 
     baz: again 
+4

주문과 관련된 경우 yaml에 시퀀스를 사용해야합니다. yaml 데이터 구조를 다시 생각해보십시오. –

+0

@mugen kenichi 질문을 업데이트했습니다. – bliof

+1

예, 실제로 여기에 설명 된 순서대로 매핑됩니다. http://www.yaml.org/spec/1.2/spec.html#id2765410 –

답변

6

및 "고"매핑 키 순서가없는 "이라는 YAML spec specifically states 노드 순서는, 일련의 의미가 모든 경우에 사용해야합니다 ". 매핑의 순서를 추론하는 것은 사양을 위반하는 것입니다. mugen에 언급 된대로 정렬 된 매핑을 사용하면 주문 보존을위한 올바른 솔루션입니다. 당신 정말가 원한다면

, 당신은 어떻게 든 순서를 유지하는 Tie::IxHash로 덤프하는 YAML 파서를 얻을 수 ...하지만 난 당신에게 제어 수준을 제공합니다 더 펄 YAML 파서 알고. YAML::Old::Loader으로 뭔가를 할 수도 있지만 아주 좋은 YAML 파서는 아니며 YAML :: Old :: Loader는 문서화되어 있지 않습니다.

세 번째 옵션은 명시적인 YAML tags (일명 유형)을 사용하여 파서가 특수 유형으로 매핑을로드하도록 지시 한 다음 콜백을 제공하는 것입니다. 그러나 그렇다고하더라도 YAML 파서가 콜백을 제공 할 가능성이 있습니다 순서가없는 해시로

단순히 YAML을 변경하는 것이 좋습니다. 이식 가능한 데이터 언어의 요점은 모든 의미 론적 의미가 특정 파서에 함축되어 있지 않고 데이터 파일이나 명세에서 명백하다는 것입니다. 정렬 된 매핑은 허용되고 조밀 한 YAML 관용구입니다.

- foo: 
     bar: some value 
     baz: other value 
- qwe: 
     bar: yet another value 
     baz: again 
관련 문제