変換はデータモデルの問題です

似ているように見える形式でも、同じ情報は保持されません。 JSON には、オブジェクト、配列、数値、文字列、ブール値、および null が含まれます。 CSV には行とフィールドがありますが、ユニバーサル型はありません。 YAML は、コメント、アンカー、タグ、プレゼンテーションの詳細を表現できます。マークダウンは散文の構造を記述します。 HTML はドキュメント ツリーを記述します。 Base64 は暗号化ではなくエンコードです。 URL エンコードは、パス、クエリ、およびフラグメント コンポーネントに異なる方法で適用されます。

構文的に有効な出力でも破損する可能性があります。

安全な質問は、ターゲットが表現できないソースにどのような意味が存在するかということです。

5 ステップのプリフライトを使用する

1情報源の特定

句読点が重なっている場合は、自動検出に依存しないでください。

2消費者の定義

API、スプレッドシート、Web サイト、および人間によるエクスポートには、異なる出力が必要です。

3損失を予測する

型、コメント、数式、順序、エンコーディングは存続しない可能性があります。

4サンプルを変換する

データセット全体を処理する前に、エッジケースを含めます。

5解析して比較する

結果を使用するシステムで検証します。

JSON: 厳密な構造と実数型

JSON には二重引用符で囲まれたキーと文字列が必要で、コメントや末尾のカンマは許可されず、NaN または無限大を表すことはできません。一般的な障害点には、コンシューマーによって丸められた大きな整数、文字列に変換された日付、上書きされた重複キー、およびエスケープされていない制御文字が含まれます。フォーマットまたは変換後、外観をチェックするのではなく、出力を再度解析します。

CSV: 単純なファイル内に隠されたコンテキスト

CSV の失敗例
ValueFailure安全な取り扱い
テキスト内のカンマ追加の列フィールドを引用します
本文中の引用早期終了見積もりを2倍にする
先頭のゼロ識別子が数字になるテキストとしてインポート
長整数精度の損失テキストとして残す
数式のような接頭辞スプレッドシートの実行信頼できないエクスポートをサニタイズする

実際のシステムでは、タブ、セミコロン、さまざまなエンコーディング、およびアプリケーション固有のインポート ルールも使用されます。カンマで区切るのではなく、本物の CSV を解析します。

JSON と YAML は完全に可逆的ではありません

JSON- から YAML は通常は簡単です。 YAML-to-JSON は、コメント、アンカー、エイリアス、明示的なタグ、およびスカラー スタイルを破棄する場合があります。文字列の同一性が重要な場合は、識別子、バージョン番号、日付、およびあいまいな値を引用符で囲みます。宛先で使用される実際のパーサーを使用してテストします。

Markdown 変換と HTML 変換は不可逆変換です

任意の HTML には、Markdown では表現できないレイアウト、フォーム、スクリプト、属性、埋め込みメディア、カスタム コンポーネントを含めることができます。 HTML-to-Markdown は、ページ全体ではなく、セマンティック コンテンツを保持する必要があります。 Markdown-to-HTML は、レンダラのサポートされている構文内でより予測可能です。信頼できない入力を公開する前に、生成された HTML をサニタイズします。

Base64 はバイトをエンコードします。それは彼らを守りません

Base64 では、バイナリ データをテキストとして表現できるようになり、サイズが増加します。誰でも解読できます。テキストはバイト (通常は UTF-8) に変換され、同じ文字エンコーディングでデコードされる必要があります。

Base64 はセキュリティ境界ではありません。

秘密、資格情報、個人情報、または実行可能コンテンツを隠すために使用しないでください。

URL エンコーディングはコンポーネント固有です

完全な URL をクエリ値であるかのようにエンコードすると、区切り文字が破損する可能性があります。値をクエリ パラメーターに挿入する前にエンコードし、二重エンコードを避け、標準対応の URL パーサーを使用し、デコードされたユーザー入力が安全な HTML または安全なリダイレクトであると決して想定しないでください。

Jivaroのコンバータを使用してください

  1. テキストおよびデータ形式コンバーターを開きます。
  2. 検出があいまいな場合は、ソースとターゲットを明示的に選択します。
  3. 代表的なサンプルを貼り付けます。
  4. JSON プリティ/ミニファイ、JSON↔YAML、Markdown↔HTML、HTML→テキスト/BBCode、CSV→JSON、URL エンコード/デコード、またはBase64 エンコード/デコード。
  5. エラーを検査してプレビューします。
  6. 宛先パーサーで検証します。
  7. キー数、行数、タイプ、エッジ値を比較します。

検証チェックリスト

Syntaxターゲットはそれを解析できますか?

実際のパーサーまたはインポーターを使用します。

Shape構造は生き残ったのか?

キー、行、ネストを比較します。

Types文字列は文字列のままでしたか?

ID、日付、ブール値、NULL、大きな数値をチェックします。

Encodingキャラクターはそのままですか?

名前、記号、行末をテストします。

セキュリティ出力は実行できますか?

HTML とスプレッドシートにバインドされたデータをサニタイズします。

往復意味は戻るのか?

フォーマットが許可する場合は、元に変換します。

ラウンドトリップの例から隠れた損失が明らかになる

YAML 構成を JSON に変換し、その逆に変換します。値が返された場合でも、コメントとアンカーが消える場合があります。 CSV を JSON に変換し、またその逆に変換します。列の順序、引用符で囲まれた空の文字列、および数値に見える識別子が変更される可能性があります。 Markdown を HTML に変換し、またその逆に変換します。生の属性、カスタム ブロック、および正確な空白が失われる可能性があります。ターゲット形式に同等の表現がない場合、これらはコンバータの欠陥ではありません。

空の値、Unicode、区切り文字、長整数、ネストされたデータ、および先行ゼロを含む小さな「ゴールデン」サンプルを作成します。予想される解析結果を保存し、ワークフローやコンバータが変更されるたびにそれを使用します。

生成された出力のセキュリティチェック

構造化テキストはインポート時に実行可能になります。 HTML はアクティブ コンテンツを実行でき、スプレッドシートのセルは数式をトリガーでき、URL はユーザーをリダイレクトでき、デコードされた Base64 にはファイルまたはスクリプトを含めることができます。変換を検証やサニタイズではなく、表現の変更として扱います。変換後、公開または実行前に宛先のセキュリティ制御を適用します。

よくある質問

YAML は常に JSON と互換性がありますか?

JSON は YAML 1.2 と一致しますが、コメント、アンカー、タグ、スカラー スタイル、およびパーサーの動作により、変換に損失が生じる可能性があります。

CSV で先頭のゼロがなくなったのはなぜですか?

インポーターは識別子を数値として解釈した可能性があります。その列をテキストとしてインポートするか、入力された形式を使用します。

Base64 はデータを暗号化しますか?

いいえ。バイトの表現が変更されるだけです。

コンバージョンを確認するにはどうすればよいですか?

宛先システムで解析し、構造と型を比較し、Unicode とエッジ値をテストし、可能な場合はラウンドトリップします。

関連するJivaroアプリ

ライティングとテキストテキストおよびデータ形式コンバーター

JSON、YAML、XML、CSV、TSV、NDJSON、Markdown、HTML、BBCode、URL、Base64、プレーンテキストをブラウザー内で直接整形・変換します。

アプリを開く

出典と参考文献