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のクォートスタイル:

  1. クォートなし -- ほとんどの単純な文字列で使用可能。先頭に : # [ ] { } , & * ? | - < > = ! % @ \\ を含められない。
  2. シングルクォート('' -- エスケープシーケンスは処理されない。唯一のエスケープはリテラルのシングルクォート用の ''。バックスラッシュやダブルクォートを含む文字列に最適。
  3. ダブルクォート("" -- \n\t\\\" などのエスケープシーケンスをサポート。JSONの動作に最も近い。

YAMLでクォートが必要になる文字:

# これらはクォートが必要:
colon_value: "value: with colon"
hash_value: "value # with hash"
bracket: "[not an array]"
ampersand: "&not_an_anchor"
asterisk: "*not_an_alias"
at_start_dash: "- not a list item"

JSONからYAMLに変換する際、優れたコンバーターは:

  • 単純な文字列のクォートを削除("hello"hello
  • エスケープシーケンスを含む文字列はダブルクォートを維持
  • ダブルクォートを含む文字列にはシングルクォートを使用
  • 複数行文字列にはブロックスカラーを使用

YAMLからJSONに変換する際、すべての値が適切なJSONエスケープシーケンス付きのダブルクォート文字列になります。JSONは単一の明確な文字列形式を持つため、これは常に安全な変換です。

ユースケース

ファイルシステムパス、正規表現パターン、テンプレート文字列など特殊文字を含むJSONファイルをYAMLに変換する際に、正確な文字列値を保持する場合。

試してみる — JSON ↔ YAML Converter

フルツールを開く