変換はデータモデルの問題です
似ているように見える形式でも、同じ情報は保持されません。 JSON には、オブジェクト、配列、数値、文字列、ブール値、および null が含まれます。 CSV には行とフィールドがありますが、ユニバーサル型はありません。 YAML は、コメント、アンカー、タグ、プレゼンテーションの詳細を表現できます。マークダウンは散文の構造を記述します。 HTML はドキュメント ツリーを記述します。 Base64 は暗号化ではなくエンコードです。 URL エンコードは、パス、クエリ、およびフラグメント コンポーネントに異なる方法で適用されます。
安全な質問は、ターゲットが表現できないソースにどのような意味が存在するかということです。
5 ステップのプリフライトを使用する
句読点が重なっている場合は、自動検出に依存しないでください。
API、スプレッドシート、Web サイト、および人間によるエクスポートには、異なる出力が必要です。
型、コメント、数式、順序、エンコーディングは存続しない可能性があります。
データセット全体を処理する前に、エッジケースを含めます。
結果を使用するシステムで検証します。
JSON: 厳密な構造と実数型
JSON には二重引用符で囲まれたキーと文字列が必要で、コメントや末尾のカンマは許可されず、NaN または無限大を表すことはできません。一般的な障害点には、コンシューマーによって丸められた大きな整数、文字列に変換された日付、上書きされた重複キー、およびエスケープされていない制御文字が含まれます。フォーマットまたは変換後、外観をチェックするのではなく、出力を再度解析します。
CSV: 単純なファイル内に隠されたコンテキスト
| Value | Failure | 安全な取り扱い |
|---|---|---|
| テキスト内のカンマ | 追加の列 | フィールドを引用します |
| 本文中の引用 | 早期終了 | 見積もりを2倍にする |
| 先頭のゼロ | 識別子が数字になる | テキストとしてインポート |
| 長整数 | 精度の損失 | テキストとして残す |
| 数式のような接頭辞 | スプレッドシートの実行 | 信頼できないエクスポートをサニタイズする |
実際のシステムでは、タブ、セミコロン、さまざまなエンコーディング、およびアプリケーション固有のインポート ルールも使用されます。カンマで区切るのではなく、本物の CSV を解析します。
JSON と YAML は完全に可逆的ではありません
JSON- から YAML は通常は簡単です。 YAML-to-JSON は、コメント、アンカー、エイリアス、明示的なタグ、およびスカラー スタイルを破棄する場合があります。文字列の同一性が重要な場合は、識別子、バージョン番号、日付、およびあいまいな値を引用符で囲みます。宛先で使用される実際のパーサーを使用してテストします。
Markdown 変換と HTML 変換は不可逆変換です
任意の HTML には、Markdown では表現できないレイアウト、フォーム、スクリプト、属性、埋め込みメディア、カスタム コンポーネントを含めることができます。 HTML-to-Markdown は、ページ全体ではなく、セマンティック コンテンツを保持する必要があります。 Markdown-to-HTML は、レンダラのサポートされている構文内でより予測可能です。信頼できない入力を公開する前に、生成された HTML をサニタイズします。
Base64 はバイトをエンコードします。それは彼らを守りません
Base64 では、バイナリ データをテキストとして表現できるようになり、サイズが増加します。誰でも解読できます。テキストはバイト (通常は UTF-8) に変換され、同じ文字エンコーディングでデコードされる必要があります。
秘密、資格情報、個人情報、または実行可能コンテンツを隠すために使用しないでください。
URL エンコーディングはコンポーネント固有です
完全な URL をクエリ値であるかのようにエンコードすると、区切り文字が破損する可能性があります。値をクエリ パラメーターに挿入する前にエンコードし、二重エンコードを避け、標準対応の URL パーサーを使用し、デコードされたユーザー入力が安全な HTML または安全なリダイレクトであると決して想定しないでください。
Jivaroのコンバータを使用してください
- テキストおよびデータ形式コンバーターを開きます。
- 検出があいまいな場合は、ソースとターゲットを明示的に選択します。
- 代表的なサンプルを貼り付けます。
- JSON プリティ/ミニファイ、JSON↔YAML、Markdown↔HTML、HTML→テキスト/BBCode、CSV→JSON、URL エンコード/デコード、またはBase64 エンコード/デコード。
- エラーを検査してプレビューします。
- 宛先パーサーで検証します。
- キー数、行数、タイプ、エッジ値を比較します。
検証チェックリスト
実際のパーサーまたはインポーターを使用します。
キー、行、ネストを比較します。
ID、日付、ブール値、NULL、大きな数値をチェックします。
名前、記号、行末をテストします。
HTML とスプレッドシートにバインドされたデータをサニタイズします。
フォーマットが許可する場合は、元に変換します。
ラウンドトリップの例から隠れた損失が明らかになる
YAML 構成を JSON に変換し、その逆に変換します。値が返された場合でも、コメントとアンカーが消える場合があります。 CSV を JSON に変換し、またその逆に変換します。列の順序、引用符で囲まれた空の文字列、および数値に見える識別子が変更される可能性があります。 Markdown を HTML に変換し、またその逆に変換します。生の属性、カスタム ブロック、および正確な空白が失われる可能性があります。ターゲット形式に同等の表現がない場合、これらはコンバータの欠陥ではありません。
空の値、Unicode、区切り文字、長整数、ネストされたデータ、および先行ゼロを含む小さな「ゴールデン」サンプルを作成します。予想される解析結果を保存し、ワークフローやコンバータが変更されるたびにそれを使用します。
生成された出力のセキュリティチェック
構造化テキストはインポート時に実行可能になります。 HTML はアクティブ コンテンツを実行でき、スプレッドシートのセルは数式をトリガーでき、URL はユーザーをリダイレクトでき、デコードされた Base64 にはファイルまたはスクリプトを含めることができます。変換を検証やサニタイズではなく、表現の変更として扱います。変換後、公開または実行前に宛先のセキュリティ制御を適用します。
よくある質問
JSON は YAML 1.2 と一致しますが、コメント、アンカー、タグ、スカラー スタイル、およびパーサーの動作により、変換に損失が生じる可能性があります。
インポーターは識別子を数値として解釈した可能性があります。その列をテキストとしてインポートするか、入力された形式を使用します。
いいえ。バイトの表現が変更されるだけです。
宛先システムで解析し、構造と型を比較し、Unicode とエッジ値をテストし、可能な場合はラウンドトリップします。
関連するJivaroアプリ
JSON、YAML、XML、CSV、TSV、NDJSON、Markdown、HTML、BBCode、URL、Base64、プレーンテキストをブラウザー内で直接整形・変換します。
アプリを開く出典と参考文献
- JSON データ交換フォーマット (RFC 8259)RFC エディター · リファレンス
- CSV ファイルの共通フォーマットと MIME タイプ (RFC 4180)RFC エディター · リファレンス
- YAML 1.2.2 仕様ZZQPH0002QXZYAML 言語開発チーム · リファレンス
- Base-N エンコーディング (RFC 4648)RFC エディター · リファレンス
- URL 標準XXQPH0002QXZWHATWG · 参照
- CommonMark 仕様XXQPH0002QXZCommonMark · リファレンス
- テキストおよびデータ形式コンバーターXXQPH0002QXZJivaro · ファーストパーティ

