JSONとYAMLの特殊文字エスケープ
JSONとYAML間の変換で特殊文字をどう扱うかを学びます。クォートルール、エスケープシーケンス、特別な扱いが必要な文字を解説します。
Strings
詳細な説明
特殊文字はJSONとYAMLで異なるエスケープ戦略が必要です。これらの違いを理解することは、2つの形式間でロスレス変換を行うために不可欠です。
JSONのエスケープルール: JSONはダブルクォート文字列内でバックスラッシュエスケープシーケンスを使用します:
{
"path": "C:\\Users\\admin",
"message": "She said \\"hello\\"",
"newline": "line1\nline2",
"tab": "col1\tcol2",
"unicode": "\u00e9"
}
同じデータのYAML(可能な場合はクォートなし):
path: C:\Users\admin
message: 'She said "hello"'
newline: "line1\nline2"
tab: "col1\tcol2"
unicode: "\u00e9"
YAMLのクォートスタイル:
- クォートなし -- ほとんどの単純な文字列で使用可能。先頭に
: # [ ] { } , & * ? | - < > = ! % @ \\を含められない。 - シングルクォート(
'') -- エスケープシーケンスは処理されない。唯一のエスケープはリテラルのシングルクォート用の''。バックスラッシュやダブルクォートを含む文字列に最適。 - ダブルクォート(
"") --\n、\t、\\、\"などのエスケープシーケンスをサポート。JSONの動作に最も近い。
YAMLでクォートが必要になる文字:
# これらはクォートが必要:
colon_value: "value: with colon"
hash_value: "value # with hash"
bracket: "[not an array]"
ampersand: "¬_an_anchor"
asterisk: "*not_an_alias"
at_start_dash: "- not a list item"
JSONからYAMLに変換する際、優れたコンバーターは:
- 単純な文字列のクォートを削除(
"hello"→hello) - エスケープシーケンスを含む文字列はダブルクォートを維持
- ダブルクォートを含む文字列にはシングルクォートを使用
- 複数行文字列にはブロックスカラーを使用
YAMLからJSONに変換する際、すべての値が適切なJSONエスケープシーケンス付きのダブルクォート文字列になります。JSONは単一の明確な文字列形式を持つため、これは常に安全な変換です。
ユースケース
ファイルシステムパス、正規表現パターン、テンプレート文字列など特殊文字を含むJSONファイルをYAMLに変換する際に、正確な文字列値を保持する場合。