2016-08-19 4 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(私は作者午前いる)、これは正しく動作使ってPythonで

、:あなたはまた、そのオンラインherehereを確認することができます

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'])) 

を(このパーサはしかし、他のいくつかの問題を抱えている)

+0

あなたの答えをありがとう。 '> -'はPHPのsymfony yamlコンポーネントでも動作します。それは新しい行バグを持っていますが。 – TiMESPLiNTER

関連する問題