mysql JSON查询方法
1,基础的JSON提取
使用 -> 或 ->> 操作符
- -> 操作符用于提取 JSON 对象中的值,返回的是 JSON 类型。
- ->> 操作符用于提取 JSON 对象中的值,并将其作为字符串返回。
JSON_UNQUOTE() 用于去除 JSON 字符串的引号,使其转换为普通字符串;
JSON_EXTRACT() 用于从 JSON 文档中提取数据,功能与 -> 操作符类似;
JSON_CONTAINS() 用于检查 JSON 数据中是否包含指定的值,(只能匹配完整值,不能用于部分匹配);
(1)假设JSON字符串:
{"name": "John", "age": 30, "city": "New York"}
查询方法:
select json->>'$.name'
select JSON_UNQUOTE(JSON_EXTRACT(json,'$.name'))
(2)假设JSON字符串:
[{"name": "John", "age": 30, "city": "New York"}]
方法:
select json->>'$[0].name'
select JSON_UNQUOTE(JSON_EXTRACT(json,'$[0].name'))
(3)假设JSON字符串:
["info": {"name": "John", "age": 30, "city": "New York"}]
方法:
select json->>'$.info[0].name'
select JSON_UNQUOTE(JSON_EXTRACT(json,'$info[0].name'))
(4)假设JSON字符串:
[]
方法:
select json->>'$[0]' IS NULL
select JSON_UNQUOTE(JSON_EXTRACT(json,'$[0]')) IS NULL
(5)假设JSON字符串:
{"name": "Charlie", "details": {"age": 35, "department": "HR"}}
方法:
select json->>'$.details.department' = 'HR'
(6)假设JSON字符串:
{"name": "Alice", "age": 25, "skills": ["Java", "Python"]}
方法:
-- 查询具备 Java 技能的员工
SELECT JSON_CONTAINS(info->'$.skills', '"Java"')
-- 查询 skills 数组中以 J 开头的技能
SELECT JSON_SEARCH(info->'$.skills', 'all', 'J%')
-- 查询所有以字母 A 开头的员工姓名
SELECT JSON_EXTRACT(info, '$.name') REGEXP '^A'