MySQL之GET_JSON_OBJECT函数
目录
- 语法:GET_JSON_OBJECT(json_doc, path)
 - 示例
 - 提取简单 JSON 对象的属性值
 - 提取嵌套 JSON 对象的属性值
 - 提取 JSON 数组中的元素
 - 结合查询使用
 - 处理不存在的路径
 
GET_JSON_OBJECT 是 
MySQL 中用于从 
JSON 字符串中提取特定数据的函数。以下是其详细介绍及示例: 
 
语法:GET_JSON_OBJECT(json_doc, path)
json_doc:要解析的JSON格式的字符串。path:使用JSONPath语法指定要提取的JSON数据的路径。
示例
提取简单 JSON 对象的属性值
SELECT GET_JSON_OBJECT('{"name": "Alice", "age": 30}', '$.name');
 
结果为:Alice。这里从一个简单的 JSON 对象中通过 $.name 路径获取了名为 name 的属性值。
SELECT GET_JSON_OBJECT('"Hello World"', '$');  -- 返回 "Hello World"
 
提取嵌套 JSON 对象的属性值
SELECT GET_JSON_OBJECT('{"person": {"name": "Alice", "address": {"city": "New York"}}}', '$.person.address.city');
 
结果为:New York。通过 $.person.address.city 路径,从嵌套的 JSON 对象中获取了 city 的值。
提取 JSON 数组中的元素
SELECT GET_JSON_OBJECT('{"students": [{"name": "Alice", "grade": 8}, {"name": "Bob", "grade": 9}]}', '$.students[0].name');
 
结果为:Alice。$.students[0].name 表示获取 students 数组中第一个元素的 name 属性值。
-- 原始 JSON: ["apple", "banana", "cherry"]
SELECT GET_JSON_OBJECT('["apple", "banana", "cherry"]', '$[0]');  -- 返回 "apple"
SELECT GET_JSON_OBJECT('["apple", "banana", "cherry"]', '$[2]');  -- 返回 "cherry"
 
结合查询使用
假设有一个名为 users 的表,其中有一个 info 列存储 JSON 格式的数据,如下所示:
CREATE TABLE users (id INT PRIMARY KEY,info JSON
);INSERT INTO users (id, info) VALUES(1, '{"name": "Alice", "age": 30, "hobbies": ["reading", "painting"]}'),(2, '{"name": "Bob", "age": 25, "hobbies": ["sports", "music"]}');
 
可以使用 GET_JSON_OBJECT 函数在查询中提取 JSON 数据:
SELECT id, GET_JSON_OBJECT(info, '$.name') AS name, GET_JSON_OBJECT(info, '$.age') AS age
FROM users;
 
该查询会从 info 列的 JSON 数据中提取出 name 和 age 属性值,并与 id 一起展示。
处理不存在的路径
如果指定的 JSONPath 在 JSON 文档中不存在,GET_JSON_OBJECT 函数将返回 NULL。例如:
SELECT GET_JSON_OBJECT('{"name": "Alice", "age": 30}', '$.address.city');
 
结果为 NULL,因为 JSON 文档中不存在 address.city 这个路径。
