JSON to SQL変換 - CREATE TABLE&INSERT文生成 オンライン
JSONデータをMySQL、PostgreSQL、SQLite、SQL Server用のCREATE TABLEおよびINSERT文に変換 — 100%ブラウザ処理、データ送信なし。
よくある質問
JSON to SQLコンバーターとは何ですか?
JSON to SQLコンバーターは、JSONデータをSQL文に変換するツールです。JSONの構造と型に基づいてデータベーススキーマを定義するCREATE TABLE文(DDL)と、テーブルにデータを挿入するINSERT INTO文(DML)を生成します。このツールはJSON値からSQLカラム型を自動的に推論します:文字列はVARCHARまたはTEXTに、数値はINTまたはFLOATに、ブール値はデータベース方言に応じてBOOLEANまたはBITに、ネストされたオブジェクトはJSONカラムとして保存されます。
JSONをSQL文に変換するにはどうすればよいですか?
入力フィールドにJSONデータ(単一オブジェクトまたはオブジェクトの配列)を貼り付けてください。対象のSQL方言(MySQL、PostgreSQL、SQLite、またはSQL Server)を選択し、テーブル名を入力し、出力モード(CREATE TABLE + INSERT、CREATEのみ、またはINSERTのみ)を選択します。ツールは出力パネルに対応するSQLを即座に生成します。結果をクリップボードにコピーする前に、バッチINSERTモード、主キーの選択、ネストされたJSONの処理などのオプションをカスタマイズできます。
型推論はどのように機能しますか?
このツールは、すべての行の各JSONフィールドのすべての値を分析して、最適なSQLカラム型を決定します。文字列は長さに基づいてVARCHAR(255)またはTEXTに、整数は大きさに基づいてINTまたはBIGINTに、小数はFLOATに、ブール値は方言固有のブール型(PostgreSQLはBOOLEAN、MySQLはTINYINT(1)、SQL ServerはBIT)に、null値はカラムをnullableにマッピングします。'2026-03-20'のようなISO 8601日付文字列は検出され、DATEまたはTIMESTAMP型にマッピングされます。ネストされたオブジェクトと配列はJSON/JSONBカラムとして保存されます。
SQL方言間の違いは何ですか?
各SQL方言には、識別子、データ型、機能に対して固有の構文があります。MySQLはバッククォートを使用し(例:`column_name`)、PostgreSQLはダブルクォートを、SQLiteはダブルクォートを、SQL Serverはブラケット([column_name])を使用します。ブール型も異なります:PostgreSQLにはネイティブのBOOLEANがあり、MySQLはTINYINT(1)を、SQL ServerはBITを使用します。自動増分の構文も異なります:MySQLはAUTO_INCREMENT、PostgreSQLはSERIAL、SQLiteはAUTOINCREMENT、SQL ServerはIDENTITY(1,1)を使用します。JSONストレージも異なります:PostgreSQLにはJSONBがあり、MySQLにはJSONがあり、SQLiteとSQL ServerはTEXT/NVARCHAR(MAX)を使用します。
このツールを使用する際、データは安全ですか?
はい、完全に安全です。このツールはクライアントサイドのJavaScriptを使用してブラウザ内ですべてを処理します。JSONデータはコンピューターから外に出ることはありません — サーバーへのアップロード、APIコール、データストレージは一切ありません。これにより、本番データベースのデータ、機密情報を含むAPIレスポンス、SQLに変換する必要のあるあらゆる機密データに安全に使用できます。
ネストされたJSONオブジェクトと配列はどのように処理されますか?
このツールはネストされたJSONに対して2つの戦略を提供します。デフォルトの「JSONカラム」戦略は、ネストされたオブジェクトと配列をデータベースのJSON/JSONBカラムとして保存し、元の構造を保持します。「フラット化」戦略は、外部キー関係を持つ別々の関連テーブルを作成してデータを正規化します — ネストされたオブジェクトはプレフィックス付き名前のフラット化されたカラムになり、オブジェクトの配列は子テーブルを作成します。高速な保存と柔軟なクエリにはJSONカラムを、完全に正規化されたリレーショナルスキーマ設計にはフラット化を選択してください。
バッチINSERTモードとは何ですか?
バッチINSERTモードは、マルチバリュー構文を使用して複数の行を1つのINSERT文にまとめます:INSERT INTO table VALUES (...), (...), (...)。これは、データベースへのラウンドトリップ数を削減するため、大規模データセットをインポートする際に個別のINSERT文よりも大幅に高速です。文サイズとパフォーマンスのバランスを取るためにバッチサイズ(デフォルト:1文あたり100行)を設定できます。すべての主要データベースがこの構文をサポートしています。
コード例
// JSON to SQL converter
function jsonToSql(jsonStr, options = {}) {
const {
tableName = 'my_table',
dialect = 'mysql',
includeCreate = true,
includeInsert = true,
} = options;
const data = JSON.parse(jsonStr);
const rows = Array.isArray(data) ? data : [data];
if (rows.length === 0) return '';
// Collect all column names
const columns = [...new Set(rows.flatMap(Object.keys))];
// Infer types from all rows
const types = {};
for (const col of columns) {
for (const row of rows) {
const val = row[col];
if (val === null || val === undefined) continue;
if (typeof val === 'boolean') types[col] = 'BOOLEAN';
else if (typeof val === 'number') {
types[col] = Number.isInteger(val) ? 'INT' : 'FLOAT';
} else if (typeof val === 'object') types[col] = 'JSON';
else types[col] = 'VARCHAR(255)';
}
if (!types[col]) types[col] = 'VARCHAR(255)';
}
const quote = dialect === 'mysql' ? (n) => `\`${n}\``
: dialect === 'sqlserver' ? (n) => `[${n}]`
: (n) => `"${n}"`;
const parts = [];
if (includeCreate) {
const colDefs = columns.map(c => ` ${quote(c)} ${types[c]}`);
parts.push(`CREATE TABLE ${quote(tableName)} (\n${colDefs.join(',\n')}\n);`);
}
if (includeInsert) {
for (const row of rows) {
const vals = columns.map(c => {
const v = row[c];
if (v === null || v === undefined) return 'NULL';
if (typeof v === 'boolean') return v ? 'TRUE' : 'FALSE';
if (typeof v === 'number') return String(v);
if (typeof v === 'object') return `'${JSON.stringify(v).replace(/'/g, "''")}'`;
return `'${String(v).replace(/'/g, "''")}'`;
});
parts.push(
`INSERT INTO ${quote(tableName)} (${columns.map(quote).join(', ')}) VALUES (${vals.join(', ')});`
);
}
}
return parts.join('\n\n');
}
// Example usage
const json = '[{"id":1,"name":"Alice","active":true},{"id":2,"name":"Bob","active":false}]';
console.log(jsonToSql(json, { tableName: 'users', dialect: 'postgresql' }));