MySQL JSON_OBJECT() 函数使用指南

MySQL JSON_OBJECT() 函数返回一个包含了由参数指定的所有键值对的 JSON 对象。

JSON_OBJECT() 语法

这里是 MySQL JSON_OBJECT() 的语法:

JSON_OBJECT(key, value[, key2, value2, ...])

参数

key
必需的。对象中的键。
value
必需的。对象中的 key 的值。

返回值

JSON_OBJECT() 函数评估参数中的所有的键值对,并返回一个包含了所有键值对的 JSON 对象。

由于 JSON 对象中的所有键为字符串,因此 JSON_OBJECT() 会将不是字符串类型的 key 转为字符串类型。为了保证程序的稳定性,我们一般使用字符串类型的 key.

执行过程中可能会出现如下错误:

  • 如果 keyNULL, MySQL 将返回错误: ERROR 3158 (22032): JSON documents may not contain NULL member names.
  • 如果由奇数个参数, MySQL 将返回错误: ERROR 1582 (42000): Incorrect parameter count in the call to native function 'json_object'

JSON_OBJECT() 示例

这里列出了几个常见的 JSON_OBJECT() 示例。

示例 1

SELECT JSON_OBJECT('name', 'Jim', 'age', 20);
+---------------------------------------+
| JSON_OBJECT('name', 'Jim', 'age', 20) |
+---------------------------------------+
| {"age": 20, "name": "Jim"}            |
+---------------------------------------+

这里, JSON_OBJECT() 返回的 JSON 对象中由两个成员: nameage。其中 name 的值为 'Jim'age 的值为 20

重复的键

如果 JSON_OBJECT() 的参数中出现了重复的键值对,那么后面的键值对保留在最终返回的对象中。

SELECT JSON_OBJECT('name', 'Jim', 'age', 20, 'name', 'Tim');
+------------------------------------------------------+
| JSON_OBJECT('name', 'Jim', 'age', 20, 'name', 'Tim') |
+------------------------------------------------------+
| {"age": 20, "name": "Tim"}                           |
+------------------------------------------------------+

包含复杂的对象

复杂的 JSON 对象可以存储更多的信息。

SELECT JSON_OBJECT(
        'name',
        'Tim',
        'age',
        20,
        'friend',
        JSON_OBJECT('name', 'Jim', 'age', 20),
        'hobby',
        JSON_ARRAY('games', 'sports')
    ) AS object;
+------------------------------------------------------------------------------------------------+
| object                                                                                         |
+------------------------------------------------------------------------------------------------+
| {"age": 20, "name": "Tim", "hobby": ["games", "sports"], "friend": {"age": 20, "name": "Jim"}} |
+------------------------------------------------------------------------------------------------+

这里, 我们创建了如下 JSON 对象:

{
  "age": 20,
  "name": "Tim",
  "hobby": ["games", "sports"],
  "friend": { "age": 20, "name": "Jim" }
}

其中:

  • hobby 的值是个数组,通过 JSON_ARRAY() 函数计算得出.
  • friend 的值是个对象,通过 JSON_OBJECT() 函数计算得出.