開発者ツール · 構文コンバータ
JSON から YAML への変換の仕組み: 引用、インデント、フロー スタイル
· 仕組み
json ヤムル 開発者のワークフロー
JSON から YAML への変換は中かっこを削除するだけのように見えますが、コンバーターはどの文字列に引用符が必要か、ブロック スタイルとフロー スタイルをいつ使用するかについて実際の決定を行います。この投稿では、それらの決定について説明します。
中括弧は消えますが、引用符はどこに行くのでしょうか? — YAML に変換された JSON ペイロードと、結果内の引用符で囲まれた文字列とベア文字列の混合
中括弧や引用符を削除しても、JSON オブジェクトは信頼できる YAML ファイルにはなりません。コンバーターは、ネストされたマッピング、配列、文字列、および改行がどのように表現されるか、および数値またはブール値のように見える値がテキストのままであるかどうかを決定する必要があります。 API サービス定義を Compose に移動する DevOps エンジニアは、結果をデプロイメント ディレクトリにコピーする前に、これらの決定を予測可能にする必要があります。変換により、サービスの実際の構成ではなく、構文が変更されます。
JSON は(ほぼ)すでに YAML になっています — 変換が始まる前から入力が有効な YAML 1.2 フロー スタイルである理由
YAML 1.2 は、JSON 構文を通常の JSON 形式のデータに対して許可されたフロー スタイルのサブセットとして扱います。これが、JSON オブジェクトがすでに YAML に近い理由を説明しています。ただし、有用な変換は通常、人間が判読できるブロック スタイルのインデントに切り替わります。入力は最初に JSON として解析されます。任意のシェル コマンドが実行されることはありません。 ToolAcre は、逆パスの制限されたスキーマを介して YAML を読み込み、安全でないタグを拒否し、エイリアスの展開を制限するため、コンバーターを使用して信頼できない !!js/function タグから任意のオブジェクトをインスタンス化することはできません。
ブロック スタイルとフロー スタイル — コンバーターが中括弧や括弧よりもインデント ベースのマッピングとシーケンスを選択する方法、およびインデントの深さが何を意味するか
ブロック スタイルでは、インデントされたキーと値のペアと、配列項目のダッシュで始まる行が使用されます。services.web の下の画像文字列は Web の下でインデントされ、ポートはシーケンスになります。フロー スタイルでは、JSON のような中括弧と括弧が保持されます。 ToolAcre は、単に句読点を正規表現に置き換えるのではなく、デフォルトで 2 スペースのインデント、参照なし、無制限の線幅設定で js-yaml ダンプを使用します。インデント幅を変更すると、実際のキーや配列の順序ではなく、読みやすさに影響します。
どの文字列を引用符で囲む必要があるか — 引用符で囲まないとブール値、数値、NULL、または日付になる値、およびコロン、ハッシュ、または先頭のスペースを含む文字列
一部の文字列は、別のパーサーに耐えるために引用符で囲む必要があります。「false」はブール値 false ではなくテキストのままにする必要があり、「2026-09-28」は YAML 1.1 コンシューマで暗黙的に日付になってはならず、コロンとスペースが続く場合はマッピング構文と誤認される可能性があります。 ToolAcre のダンパーは、古い YAML リーダーの互換性の選択肢を含め、保護引用符を選択します。通常の画像参照をコロンで引用することは必ずしも必要ではありません。存在する引用符をむやみに削除するとラウンドトリップが中断される可能性があります。種類と外観を確認します。
複数行の文字列 — JSON 文字列内の改行がリテラル (|) または折り畳まれた (>) ブロック スカラーになる仕組み
実際の改行を含む JSON 文字列は、| を使用した YAML ブロック スカラーとしてレンダリングされる場合があります。 |- 形式は最後の改行を削除しますが、 |それを保存します。 > とすると、一部の改行がスペースに折りたたまれます。これらのインジケーターはデータを説明するものであり、フォーマットガーニッシュを説明するものではありません。 ToolAcre のダンパーは、常に 1 つのスタイルを強制するのではなく、元の文字列を読み取ることができる表現を選択します。変換後、複数行の環境値または証明書を注意深く検査してください。ここでのインデント エラーにより、アプリケーションが受け取る内容が変わる可能性があります。
実用的な例: サービス定義の変換 — ネストされた JSON オブジェクトを、各引用符とスタイル決定に注釈が付けられた YAML に変換する
具体的な JSON オブジェクトの場合は、イメージ "example/web:1"、ポート ["8080:80"]、および環境キー DEBUG="false"、RELEASE="2026-09-28"、および MESSAGE="line one\nline two" を指定した services.web を使用します。 ToolAcre はイメージ: example/web:1 とポート リストを出力します。 DEBUG は引用符で囲まれた「false」になり、RELEASE は引用符で囲まれた「2026-09-28」になり、MESSAGE は 2 つのインデント行を持つ |- ブロックを使用します。それぞれの選択により、元の型が保護されます。 compose.yaml として保存する前に、パネルのラウンドトリップ チェックを実行します。コンバーターは、イメージが存在するか、サービスが開始されるかを判断できません。
これでカバーされないもの — コメント、アンカー、カスタム キー順序の追加。これらは引き継がれる JSON ソースには存在しません。
JSON には保持するコメント、アンカー、エイリアスがありません。コンバーターは、コメント、アンカー、またはエイリアスを含まなかった入力からそれらを回復することはできません。また、Compose 固有のシークレット管理、カスタム キーの順序、または Kubernetes API バージョンの有効性を推測することもできません。 2 つの YAML ファイルは、異なる空白と引用符のスタイルを使用しながら、同じデータをシリアル化できます。ターゲット プログラムで結果を確認し、実際の API トークンを外部変換サービスに貼り付けることを避けてください。
要点: 変換はルールを使用した再シリアル化です。また、構文コンバーター パネルがブラウザーで YAML を生成する方法についても説明します。
変換は、句読点の削除ではなく、一連のルールに基づいて解析および再シリアル化されます。構文コンバーターはブラウザーでこれらの操作を実行します。機密性の高い構成をローカルで検査し、メソッドを大きなファイルに適用する前に、小さなテスト オブジェクトでラウンド トリップを実行します。引用符で囲まれた値が戻る途中で型が変わる場合、その書式設定は単なる表面的なものではないため、調査が必要です。