本文へスキップ
AZ Tools

JSON → SQL INSERT ジェネレーター

JSON 配列(または単一オブジェクト)を貼り付けて、すぐに実行できる SQL insert を出力。カラムはすべてのキーの和集合;カラムがない行は NULL になる。文字列はシングルクォートでエスケープされ、数値とブール値はリテラルになり、ネストされたオブジェクト / 配列は JSON にシリアライズされる。オプションの `ON CONFLICT`(Postgres / SQLite)または `ON DUPLICATE KEY UPDATE`(MySQL)で、出力を同期ジョブに直接ドロップできる。

SQL(3)
INSERT INTO "users" ("id", "name", "email", "verified", "joined")
VALUES
  (1, 'Alice', 'alice@example.com', TRUE, '2024-01-15'),
  (2, 'Bob', 'bob@example.com', FALSE, '2024-03-22'),
  (3, 'Carol', NULL, TRUE, '2024-06-01');

文字列はシングルクォートの二重化でエスケープされる — 4 つの方言すべてで安全。

使い方

  1. オブジェクトの JSON 配列(または単一オブジェクト)を貼り付け。
  2. テーブル名と SQL 方言を設定。
  3. 複数行 VALUES をトグルして単一文、オフにすると行ごとに INSERT。ON CONFLICT / ON DUPLICATE KEY UPDATE が欲しければ upsert をトグル。

よくある質問

ネストされたオブジェクトはどう扱われる?
JSON にシリアライズされ、引用符付きの文字列として挿入される。PostgreSQL と MySQL の `JSON` / `JSONB` 型のカラムはこれらを直接受け入れる;SQLite では TEXT として入る。
複数行と行ごとの INSERT の違いは?
複数行は単一の `INSERT INTO ... VALUES (…), (…), (…);` を生成し、バルクロードでははるかに高速。行ごとは N 個の文を生成 — 個別の行をコメントアウトしたい、または部分的な失敗を予想するときに便利。
このエスケープだけで、そのまま実行しても安全ですか?
単一引用符をエスケープして構文として正しい文にしているだけで、悪意ある入力に対して安全という意味ではありません。生成されたSQLはただのテキストです。実行する前に目を通してください。自分の管理外から来たデータなら、生成した文をコンソールに貼るのではなく、プレースホルダー付きの文か、COPYやLOAD DATAのような一括読み込みで投入してください。
数値が引用符で囲まれたり、IDの桁が欠けたりするのはなぜ?
型はテーブルではなくJSONに従うからです。JSONで "42" と文字列として書かれていれば、列が整数でも引用符付きのリテラルになります。SQL側でキャストするか、JSONを直してください。大きな識別子は逆の落とし穴です。JSONの数値として届いた時点で、このツールに来る前にすでに末尾の桁を失っている可能性があります。IDを文字列として運ぶべき理由がここにあります。

関連ツール