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'