• father::SQLite json_group_object 是 SQLite 的内置聚合函数(aggregate function),它是在 SQLite 3.16.0 版本引入的。 这个函数的主要作用是将多行的 key-value 对聚合成一个 JSON 对象。让我演示一下基本用法:
  1. 基本用法
-- 示例表
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"
}
  1. 相关的 SQLite JSON 函数
  • json_object(): 创建 JSON 对象
  • json_array(): 创建 JSON 数组
  • json_group_array(): 将多行聚合成 JSON 数组
  • json_extract(): 从 JSON 中提取值
  • json(): 将文本转换为 JSON 格式
  1. 实际应用示例
-- 创建测试表
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"
    }
}

需要注意的几点:

  1. 这个函数需要 SQLite 3.16.0 或更高版本
  2. 如果输入的 key 重复,后面的值会覆盖前面的值
  3. 如果没有行匹配,函数返回 NULL
  4. 函数总是需要和 GROUP BY 一起使用,因为它是一个聚合函数