JSON列是指在数据库中专门用于存储JSON格式数据的列类型。现代关系型数据库(如MySQL、PostgreSQL等)和许多NoSQL数据库都支持原生JSON数据类型,允许以结构化方式存储和查询JSON数据。
-- 创建带有JSON列的表
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
attributes JSON
);
-- 插入JSON数据
INSERT INTO products (name, attributes)
VALUES ('Laptop', '{"color": "silver", "memory": "16GB", "ports": ["USB", "HDMI"]}');
-- 使用JSON_OBJECT函数构造JSON
INSERT INTO products (name, attributes)
VALUES ('Phone', JSON_OBJECT("brand", "X", "storage", "128GB", "hasNFC", true));
-- 创建表
CREATE TABLE orders (
order_id SERIAL PRIMARY KEY,
customer_info JSONB,
items JSONB[]
);
-- 插入JSON数据
INSERT INTO orders (customer_info, items)
VALUES (
'{"name": "John Doe", "email": "john@example.com"}',
ARRAY['{"product": "Book", "price": 29.99}', '{"product": "Pen", "price": 2.99}']::JSONB[]
);
// 插入JSON文档
db.products.insertOne({
name: "Camera",
specs: {
resolution: "24MP",
zoom: "10x",
features: ["WiFi", "GPS"]
},
price: 599.99
});
原因:插入的字符串不是有效的JSON格式 解决方案:使用数据库提供的JSON验证函数或在线工具先验证JSON格式
-- MySQL中验证JSON
SELECT JSON_VALID('{"invalid": json}'); -- 返回0表示无效
原因:可能使用了错误的路径语法或字段不存在 解决方案:检查数据库特定的JSON路径语法
-- MySQL中正确查询JSON字段
SELECT name FROM products WHERE JSON_EXTRACT(attributes, '$.color') = 'silver';
-- 或使用短语法
SELECT name FROM products WHERE attributes->'$.color' = '"silver"';
原因:大规模JSON数据或复杂查询可能导致性能下降 解决方案: