2016-08-19 1 views
1

이 질문에서 YAML을 구문 분석하기 위해 Symfony의 YAML 구성 요소를 사용합니다.접힌 스타일 YAML 블록의 끝에서 줄 바꿈을 제거하십시오.

나는 다음과 같은 YAML 있습니다 :

db_driver: orm 
service: 
    user_provider: user_provider 
    options: 
     supported_scopes: > 
      user_basic_information 
      internal 

이 문자열의 끝 :

"user_basic_information internal 
" 

을하지만이 문자열을 얻을 좋아 : 내가 찾은

"user_basic_information internal" 

을 다음 해결 방법 :

service: 
    user_provider: user_provider 
    options: 
     supported_scopes: > 
      user_basic_information 
      internal 
db_driver: orm 

이 블록은 줄 바꿈없이 올바른 문자열로 끝납니다. 내 YAML 파서가 버그가 있거나 YAML 언어 정의가 부족한가요?

접힌 스타일 블록을 종료하는 또 다른 방법이있어서 해킹을하지 않아도됩니까?

답변

1

두 가지 질문에 대한 대답은 예입니다. 최상위 레벨 또는 다른 매핑에 키 값 쌍을 추가하면 접힌 스칼라의 마지막 개행에 영향을주지 않습니다. 기본 클리핑되기 때문에 >, folded block style를 사용

, 당신은 항상 파일의 끝에 하나 줄 바꿈을 얻을 :

클리핑은 명시 적으로 받기를 갈망 표시등이 지정되지 않은 경우 사용되는 기본 동작입니다. 이 경우 최종 줄 바꿈 문자는 스칼라 내용으로 유지됩니다. 그러나 뒤에 오는 빈 줄은 스칼라의 내용에서 제외됩니다. 당신이 제거하기 위해서,이 경우, 명시 적 chomping operator를 사용하는 것을 원하지 않는 경우

, 대신 >>- 사용합니다. (파서가 올바르게 해석한다고 가정 할 때). 파이썬에서

는 ruamel.yaml (어느 나는 저자)를 사용하면이 제대로 작동합니다

import ruamel.yaml 

yaml_str = """\ 
db_driver: orm 
service: 
    user_provider: user_provider 
    options: 
     supported_scopes: >- 
      user_basic_information 
      internal 
""" 

data = ruamel.yaml.safe_load(yaml_str) 
print(repr(data['service']['options']['supported_scopes'])) 

당신은 또한 온라인을 확인할 수 있습니다 herehere (이 파서 그러나 다른 문제가)

+0

답변 해 주셔서 감사합니다. '> -'는 PHP의 symfony yaml 구성 요소에서도 작동합니다. 그것은 새로운 라인 버그가 있지만. – TiMESPLiNTER

관련 문제