- father::SQLite
json_group_object
是 SQLite 的内置聚合函数(aggregate function),它是在 SQLite 3.16.0 版本引入的。 这个函数的主要作用是将多行的 key-value 对聚合成一个 JSON 对象。让我演示一下基本用法:
- 基本用法:
-- 示例表
CREATE TABLE test (
key TEXT,
value TEXT
);
-- 插入测试数据
INSERT INTO test VALUES
('name', 'John'),
('age', '30'),
('city', 'New York');
-- 使用 json_group_object
SELECT json_group_object(key, value) as json_result
FROM test;
-- 输出结果:
{
"name": "John",
"age": "30",
"city": "New York"
}
- 相关的 SQLite JSON 函数:
json_object()
: 创建 JSON 对象json_array()
: 创建 JSON 数组json_group_array()
: 将多行聚合成 JSON 数组json_extract()
: 从 JSON 中提取值json()
: 将文本转换为 JSON 格式
- 实际应用示例:
-- 创建测试表
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);
CREATE TABLE user_details (
user_id INTEGER,
key TEXT,
value TEXT
);
-- 插入测试数据
INSERT INTO users VALUES (1, 'John');
INSERT INTO user_details VALUES
(1, 'email', 'john@example.com'),
(1, 'phone', '123-456-7890'),
(1, 'address', 'New York');
-- 查询用户及其所有属性
SELECT
u.id,
u.name,
json_group_object(d.key, d.value) as details
FROM users u
LEFT JOIN user_details d ON u.id = d.user_id
GROUP BY u.id;
-- 输出结果:
{
"id": 1,
"name": "John",
"details": {
"email": "john@example.com",
"phone": "123-456-7890",
"address": "New York"
}
}
需要注意的几点:
- 这个函数需要 SQLite 3.16.0 或更高版本
- 如果输入的 key 重复,后面的值会覆盖前面的值
- 如果没有行匹配,函数返回 NULL
- 函数总是需要和 GROUP BY 一起使用,因为它是一个聚合函数