一、JSON_EXTRACT
JSON_EXTRACT()
是 MySQL 中用于从 JSON 文本中提取
数据的函数。它根据指定的路径从 JSON 文本中提取并返回相应的值。
JSON_EXTRACT(json_doc, path[, path] ...)
-
json_doc
:包含 JSON 数据的文档(列或字符串)。 -
path
:要提取数据的路径,可以有多个路径。
JSON 路径语法
$
:表示 JSON 文档的根。.
:用于访问对象成员。[]
:用于访问数组元素。*
:通配符,匹配所有成员或元素。
示例
set @json = '{"name": "John","age":24, "address": {"city": "New York", "zip": "10001"}}';
select json_extract(@json, '$.name') as name;// 输出:"John"
// 查询嵌套对象中的字段
select json_extract(@json, '$.address.city') as city;
//输出:"New York"
二、json_unquote
JSON_UNQUOTE()
是 MySQL 中用于从 JSON 文本中移除引号的函数。它将 JSON 值中的转义字符和引号移除,返回一个普通的字符串。
示例
set @json = '{"name": "John","age":24, "address": {"city": "New York", "zip": "10001"}}';
select json_unquote(json_extract(@json, '$.name')) as name;//输出:John
三、json_table
JSON_TABLE()
是 MySQL 8.0 及以上版本中用于将 JSON 数据转换为关系型表格格式的函数。这允许你在查询中以表格的形式访问和处理 JSON 数据,从而使 JSON 数据的操作更加直观。
示例1
set @json = '{"name": "John","age":24, "address": {"city": "New York", "zip": "10001"}}';
select addr.cityName from json_table (@json,'$.address' columns(cityName varchar(25) path '$.city')) as addr;
示例二
SELECT
order_id,
item.product,
item.quantity
FROM orders,
JSON_TABLE(
order_info,
'$.items[*]' COLUMNS (
product VARCHAR(100) PATH '$.product',
quantity INT PATH '$.quantity'
)
) AS item;
四、json_contains
JSON_CONTAINS() 用于检查一个 JSON 文档是否包含指定的 JSON 值。
示例
set @json = '{"name": "John","age":24, "address": {"city": "New York", "zip": "10001"}}';
SELECT JSON_CONTAINS(@json, '"New York"', '$.address.city') AS isExists;// 输出:1
五、json_overlaps
JSON_OVERLAPS() 函数来检查两个 JSON 数组之间是否有交集。假设你有一个字段存储为 JSON 格式,并且你想要找出这个字段的值与一个给定数组有交集,可以使用 JSON_OVERLAPS() 函数。
示例
set @json = '[12,13,123]';
select JSON_OVERLAPS(@json,'[999,12]') // 输出1