ネストされたJSONオブジェクトと配列のインサート
ネストされたJSONオブジェクトと配列がSQL INSERT文でJSON文字列としてシリアライズされる仕組みを解説します。ネイティブJSONカラムをサポートするデータベースに便利です。
Data Types
詳細な説明
ネストされたオブジェクトのJSON文字列化
JSONデータにネストされたオブジェクトや配列が含まれる場合、Bulk INSERTツールはそれらをJSON文字列としてシリアライズします。これはJSONカラムをサポートするデータベース(PostgreSQLのJSONB、MySQLのJSON)に最適です。
JSONの例
[
{
"id": 1,
"name": "Alice",
"metadata": { "role": "admin", "permissions": ["read", "write"] },
"tags": ["vip", "early-adopter"]
},
{
"id": 2,
"name": "Bob",
"metadata": { "role": "user", "permissions": ["read"] },
"tags": ["standard"]
}
]
生成されるSQL
INSERT INTO "users" ("id", "name", "metadata", "tags")
VALUES
(1, 'Alice', '{"role":"admin","permissions":["read","write"]}', '["vip","early-adopter"]'),
(2, 'Bob', '{"role":"user","permissions":["read"]}', '["standard"]');
JSONB(PostgreSQL)での使用
PostgreSQLではテキスト値をJSONBにキャストできます:
INSERT INTO "users" ("id", "name", "metadata", "tags")
VALUES
(1, 'Alice', '{"role":"admin"}'::jsonb, '["vip"]'::jsonb);
カラム型の推論
ネストされたオブジェクトを持つカラムはTEXT型として推論されます。JSONやJSONBが必要な場合は、CREATE TABLE出力を手動で修正するか、テーブル作成後にALTERしてください。
JSON文字列内の特殊文字
シリアライズされたJSONはSQL用に適切にエスケープされます:
- JSON文字列内のシングルクォートは二重化されます(
'') - JSON構造は
JSON.stringify()でシリアライズされたとおりに保持されます - Unicode文字はそのまま変更なく渡されます
ユースケース
アプリケーションがユーザー設定をネストされたJSONオブジェクトとして格納している場合。データベースのシード時に、これらの設定をJSON文字列としてインサートし、PostgreSQLがクエリ用にJSONB型にキャストできるようにする必要があります。