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
这个路径。