JSON_OBJECT()¶
JSON_OBJECT() 接收一组键值对并返回包含这些成员的 JSON 对象。来自类型化标量(如 DATE、TIME 和 DATETIME)的键会转换为其字符串表示形式。
函数说明¶
JSON_OBJECT() 接收偶数个参数,键与值交替排列。每个键转换为字符串,每个值转换为其 JSON 表示形式。如果同一个键出现多次,以最后一次出现的为准(后面的值覆盖同键前面的值)。
不带参数调用 JSON_OBJECT() 返回空 JSON 对象 {}。
参数个数为奇数会导致错误。
Syntax¶
> JSON_OBJECT(key, val [, key, val] ...)
Arguments¶
参数 |
说明 |
|---|---|
key |
每对必填。用于命名 JSON 成员的字符串或类型化标量。 |
val |
每对必填。与键关联的值,转换为其 JSON 表示形式。 |
Examples¶
DROP DATABASE IF EXISTS dbfuncs;
CREATE DATABASE dbfuncs;
USE dbfuncs;
-- 空对象
SELECT JSON_OBJECT();
-- 简单键值对
SELECT JSON_OBJECT('id', 87, 'name', 'carrot');
SELECT JSON_OBJECT('a', 1, 'b', 'abc', 'c', NULL, 'd', true);
-- 数值和 decimal
SELECT JSON_OBJECT('d64', CAST(12345.67 AS DECIMAL(10,2)), 'd128', CAST(9876.54321 AS DECIMAL(30,10)));
-- 类型化标量键(DATE、TIME、DATETIME)
SELECT JSON_OBJECT(CAST('2021-02-01' AS DATE), 'date_val');
SELECT JSON_OBJECT(CAST('11:11:11' AS TIME), 'time_val');
SELECT JSON_OBJECT(CAST('2021-02-01 11:11:11' AS DATETIME), 'dt_val');
-- UUID 和 YEAR
SELECT JSON_OBJECT('uid', CAST('550e8400-e29b-41d4-a716-446655440000' AS UUID));
SELECT JSON_OBJECT('year', CAST('2021' AS YEAR));
-- BIT 和二进制类型
SELECT JSON_OBJECT('bit1', CAST(1 AS BIT), 'bit0', CAST(0 AS BIT));
SELECT JSON_OBJECT('binary', CAST('hello' AS BINARY(10)), 'varbin', CAST('world' AS VARBINARY));
-- 向量
SELECT JSON_OBJECT('vec32', CAST('[1.0,2.0,3.0]' AS VECF32(3)), 'vec64', CAST('[1.5,2.5,3.5]' AS VECF64(3)));
-- 嵌套 JSON
SELECT JSON_OBJECT('arr', JSON_ARRAY(1, 2, 3), 'obj', JSON_OBJECT('x', 1, 'y', 2));
-- 键覆盖:最后一个键优先
SELECT JSON_OBJECT('id', 1, 'id', 2);
SELECT JSON_OBJECT('a', 1, 'a', 'replaced', 'a', NULL);
-- 基于表的示例,包含所有类型
CREATE TABLE jot (
id INT,
b BOOL, bi BIGINT, f FLOAT, d DOUBLE,
d64 DECIMAL(10, 3), d128 DECIMAL(30, 10), d256 DECIMAL(50, 20),
vc VARCHAR(100), t TEXT,
td DATE, tt TIME, tdt DATETIME,
uid UUID, js JSON,
vf32 VECF32(3), vf64 VECF64(3)
);
INSERT INTO jot VALUES
(1, true, 11111111111111, 0.1, 0.2222222, 3.14, 3.14159265359, 3.14159265358979323846,
'vvvv', 'tttttttt',
'2021-02-01', '11:11:11', '2021-02-01 11:11:11',
'550e8400-e29b-41d4-a716-446655440000',
'{"a": 1, "b": [1, 2, 3], "c": {"d": "hello"}}',
CAST('[1.0,2.0,3.0]' AS VECF32(3)), CAST('[1.5,2.5,3.5]' AS VECF64(3)))
;
SELECT id, JSON_OBJECT('id', id, 'b', b, 'bi', bi, 'f', f, 'd', d, 'd64', d64, 'd128', d128, 'vc', vc, 't', t, 'date', td, 'time', tt, 'dt', tdt, 'uid', uid, 'js', js, 'vf32', vf32, 'vf64', vf64) FROM jot;
DROP TABLE jot;
DROP DATABASE dbfuncs;