JSON / CSV / YAML / SQL / XML 変換ツール
開発でよく使うデータを、ブラウザ上で変換・構文チェックできます。
SQL 入力は INSERT INTO ... VALUES 文(MySQL、PostgreSQL、SQL Server、SQLite 形式)に対応しています。SELECT の結果は CSV として貼り付けてください。CSV の値はテキストとして読み込みます。XML の属性は "@attributes" に、属性や子要素と並ぶ要素のテキストは "#text" に保持されます。処理はすべてブラウザ内で行われます。
使い方
- 「入力データ」欄にデータを貼り付けます。「入力」メニューは「自動判定」のままにするか、形式がわかっている場合は JSON、YAML、CSV、SQL、XML のいずれかを選びます。
- 「変換先」の横にある形式をクリックします。結果は「出力」に表示され、欄の上のメッセージで変換が完了したことと、精度が失われた可能性のある大きな数値、名前を変更したキー、無視した SQL 文など、確認すべき点が示されます。入力を読み込めない場合は、メッセージにエラーが表示され、「出力」は空になります。
- その形式に表示されるオプションを調整します。たとえば CSV では「区切り文字」と「ネストしたデータ」、SQL では「SQL データベース」「文」「テーブル」、XML では「ルート」と「項目」です。オプションを変更するたびに現在の入力が変換し直されるため、形式のボタンをもう一度クリックする必要はありません。
- 変換せずに入力を確認するには、「構文チェック」をクリックします。構文が正しいこと、または何が問題なのかが表示され、パーサーが提供する場合は行と列も示されます。
- 「出力」を確認してから「結果をコピー」をクリックします。「クリア」を押すと両方の欄が空になります。
よくある質問
貼り付けたデータはどこかに送信されますか?
いいえ。データの解析と変換はブラウザ内の JavaScript で行われ、ツールがデータを LeedyBox にアップロードしたり保存したりすることはありません。ページを開くと、leedybox.com から 2 つのオープンソースライブラリ(YAML 用の js-yaml と CSV 用の PapaParse)が直接読み込まれます。これらはページ内で動作し、データがどこかに送信されることはありません。
「自動判定」はどのように形式を判断しますか?自分で選ぶべきなのはどんなときですか?
{ または [ で始まる入力は JSON、< で始まる入力は XML として読み込まれます。INSERT、CREATE、SET、START、UPDATE、WITH などの SQL キーワードの後に空白が続く形で始まる入力や、-- または /* のコメントで始まる入力は SQL として読み込まれます。それ以外の入力は、1 行目にカンマ、タブ、セミコロンが含まれていればまず CSV として、次に YAML として試されます。次の場合は、「入力」メニューで形式を自分で選んでください。1 つ目は、CSV や YAML が SQL キーワードでもある語で始まる場合です。たとえば Start date や Update time で始まる CSV のヘッダー行は SQL として読み込まれ、失敗します。2 つ目は、YAML の入力のすべての行に同じ数のカンマがある場合です。title: Hello, world の後に tags: news, tech が続くような YAML は、CSV として読み込まれることがあります。3 つ目は、自動判定では認識されないパイプ区切りや 1 列だけの CSV の場合です。4 つ目は、YAML や CSV の入力でエラーになる場合です。自動判定では形式を認識できなかったことしか表示されませんが、形式を選ぶとパーサー自身のエラーが表示され、多くの場合はその発生位置も示されます。
コメントや末尾のカンマを含む JSON、1 行に 1 つのオブジェクトを書いた JSON は使えますか?
「入力」メニューを JSON にすると、有効な JSON だけが受け付けられます。テキストが有効な JSON かどうかを確かめるには、この設定で「構文チェック」を使ってください。「自動判定」では、{ または [ で始まっていても有効な JSON でない入力は、可能であれば YAML のフロー構文として読み込まれ、その旨の注記が表示されます。この場合、末尾のカンマ、シングル引用符、引用符のないキーは使えますが、引用符のないキーにはコロンの後に空白が必要です。{a:1} は、a:1 という名前で値が null のキーとして読み込まれるためです。// や /* */ のコメントは YAML ではコメントにならず、キーや値の一部になったり、入力を読み込めなくなったりするため、先に削除してください。JSON Lines(NDJSON)は出力形式として選べますが、複数行ある場合は入力として読み込まれません。各行を [ と ] で囲み、最後の行以外の各行の後にカンマを付けてください。
YAML から変換すると、1.10 が 1.1 に、01234 が 1234 になるのはなぜですか?
引用符で囲まれていない YAML の値のうち、数値に見えるものは数値として読み込まれます。そのため、1.10 のようなバージョンは 1.1 に、01234 のような郵便番号は 1234 に、0x1F は 31 になります。テキストのまま残すには、YAML でそのような値を引用符で囲んでください。このツールは js-yaml のコアスキーマで YAML を読み込みます。このスキーマは真偽値と日付について YAML 1.2 に従うため、yes、no、on、off や 2026-10-02 のような日付はテキストのまま残り、True や FALSE のような true と false の表記だけが真偽値になります。JSON を YAML に変換する場合、"01234"、"1.10"、"yes" のように誤って解釈されるおそれのある文字列は、引用符付きで書き出されます。
XML の要素が、あるファイルではオブジェクトに、別のファイルでは配列になるのはなぜですか?
同じ親の下で繰り返される子要素は配列になりますが、1 つしかない場合は単なる値またはオブジェクトになります。そのため、<item> が 1 つの <items> と 2 つの <items> では構造が異なります。XML の値はすべてテキストとして読み込まれるため、<id>1</id> は "1" になり、007 は先頭のゼロが残ります。コメントと処理命令は削除されます。CSV と SQL の出力では、<items> のようにキーが 1 つだけのラッパーの中にある配列から行を取り出すため、<item> が 1 つしかない場合は、要素全体が JSON テキストとして 1 つの列に入ります。CSV では「平坦化(a.b.c 列)」を使うと列に分割できます。
MySQL や PostgreSQL のダンプを SQL 入力として貼り付けられますか?
はい。行が INSERT INTO ... VALUES 文で書かれていれば使えます。CREATE TABLE、SET、LOCK などの準備用の文はスキップされ、DROP TABLE などのその他の文は注記付きで無視されます。複数のテーブルの行は 1 つのリストにまとめられるため、テーブルによって列が異なる場合は 1 つずつ貼り付けてください。mysqldump は初期設定では列名を出力しないため、--complete-insert を付けてダンプしない限り、列名は column1、column2 … になります。pg_dump は初期設定では行を COPY ブロックとして書き出し、このツールはそれを読み込めないため、代わりに --column-inserts を付けてダンプしてください。ダンプに関数やストアドプロシージャも含まれている場合は、INSERT 文だけを貼り付けてください。このツールは入力をセミコロンで分割するため、関数本体の中の INSERT がデータとして読み込まれたり、変換が止まったりすることがあります。
CSV ファイルの数値が引用符付きで出力されるのはなぜですか?また、「CREATE TABLE + INSERT」ではどの列の型が使われますか?
CSV の値はすべてテキストとして扱われます。そのため 01234 のような先頭のゼロは保たれますが、42 は JSON では "42"、SQL では '42' になり、空のセルは null や NULL ではなく空の文字列になります。各列の型はその列の値から決まるため、CSV から作成したテーブルはテキストの列になります。型は VARCHAR(255)、255 文字を超える値がある場合は TEXT です(SQL Server では NVARCHAR(255) または NVARCHAR(MAX)、SQLite では TEXT)。入力が JSON または YAML で、列の値がすべて引用符で囲まれていない数値の場合や、すべて true か false の場合は、代わりに数値や真偽値の型になります。整数には整数型(データベースと数値の大きさに応じて INT、INTEGER、BIGINT のいずれか)、小数には浮動小数点型、真偽値には BOOLEAN(SQL Server では BIT、SQLite では INTEGER)が使われます。生成される文には主キー、インデックス、NOT NULL 制約が含まれないため、テーブルに必要な場合は実行する前に追加してください。