ネストされた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型として推論されます。JSONJSONBが必要な場合は、CREATE TABLE出力を手動で修正するか、テーブル作成後にALTERしてください。

JSON文字列内の特殊文字

シリアライズされたJSONはSQL用に適切にエスケープされます:

  • JSON文字列内のシングルクォートは二重化されます(''
  • JSON構造はJSON.stringify()でシリアライズされたとおりに保持されます
  • Unicode文字はそのまま変更なく渡されます

ユースケース

アプリケーションがユーザー設定をネストされたJSONオブジェクトとして格納している場合。データベースのシード時に、これらの設定をJSON文字列としてインサートし、PostgreSQLがクエリ用にJSONB型にキャストできるようにする必要があります。

試してみる — JSON to Bulk INSERT

フルツールを開く