web-dev-qa-db-ja.com

YAML文字列でコロンやその他の特殊文字をエスケープする方法は?

次のYAMLフラグメントがあります。

description: |
  "API for bean consuming applications.
  Examples: painted pony, lima bean"

Swaggerエディター はコロン(:)引用符にもかかわらず、特殊文字として。

この質問 に対する受け入れられた回答によれば、コロンは特殊文字として扱われるべきではありません。

これはSwaggerのバグですか、それとも引用符付きテキストリテラルでコロンを使用するために必要なエスケープシーケンスですか?

YAML仕様 を使用してこれを見つけようとしましたが、gaveめました。

質問に答えるには、どのようにその仕様を読む必要がありますか?

単一引用符(')と二重引用符(")YAMLで?

パイプ(|)またはより大きい(>)構築も、改行の処理または特殊文字の処理にのみ影響しますか?

26
Gustave

私はこれをswaggerのバグと考えていますが、他のエディターで問題を見てきました。 YAMLを強調表示する場合。

文字列スカラーが 単一引用符'....'で囲まれている場合、その文字列内で実行できる唯一のエスケープは、単一引用符を示すために二重単一引用符を挿入することです。

'It''s a good question'

二重引用符"...."の場合、エスケープにバックスラッシュ(\)を使用するスカラー文字列を囲み、少なくともバックスラッシュと二重引用符をエスケープする必要があります。さらに、ラインフィード(\n)などの他の特殊文字をエスケープし、バックスラッシュを前に付けることで行末をエスケープできます。

YAML仕様では リテラルスカラー内の文字をエスケープする方法はありません|で始まる)があるため、余分な改行やこれらを伴うその他のエスケープシーケンスを挿入することはできません。

折りたたみスタイル(>)の場合、エスケープ動作はリテラルスカラーと同じです。

プレーンスカラー(引用符または>/|を含まないスカラー)を除くすべての文字列スカラーには、:に続いてスペースが問題なく含まれ、エディターがそれを異なって解釈する場合、それは理解できます(完全なYAML解析は高価です)が、正しくありません。

22
Anthon

私はまったく同じ問題を抱えていましたが、HTMLエスケープコードを使用するとうまくいくことがわかりました:、私が頼ったものです。

16

すでに他のコメントで提供されている回答に基づいて: http://yaml.org/spec/1.2/spec.html#id2788097

そしてこれから: https://yaml.org/spec/1.2/spec.html#id2776092

引用符を使用すると、2つのコロンを使用してコロンの特殊文字をエスケープできることがわかりました。つまり::

したがって、説明は次のようになります。

description: "API for bean consuming applications. Examples:: painted pony, lima bean"

0
RichE