2016-08-19 40 views
1

我使用Symfony的YAML組件來解析此問題中的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,在這種情況下,條幹,用>-而不只是>。 (當然假設你的解析器正確地解釋了它)。

在Python,使用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