MYSQL通过数据库中json数据的key筛选数据

这篇博客介绍了如何在SQL查询中利用JSON_EXTRACT函数从JSON字段中提取数据,并结合LOCATE函数来判断字符串中是否包含特定字符。重点讲解了这两个函数的用法,包括JSON_EXTRACT的lambda表达式形式,以及LOCATE函数在查找子串中的应用。内容适合于数据库管理和数据处理的从业者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SELECT
	*
FROM
	table
WHERE
	LOCATE('1',JSON_EXTRACT(json_column, '$[*].json_key')) > 0
  • JSON_EXTRACT(存放json的字段,json的key)函数。

关于JSON_EXTRACT()的用法拓展:

函数中使用lambda:JSON_EXTRACT(cloumn -> '$[0]','$.key')     ->'$[0]'获取json数据中的第一条。

  • LOCATE()函数

判断字符串中是否包含某个字符。

用法转载:https://blog.youkuaiyun.com/m0_37524661/article/details/87859423

 

 

 

### 如何在 MySQL 数据库中读取 JSON 文件 #### 加载 JSON 文件至 MySQL 表格 为了将外部的 JSON 文件加载到 MySQL 中,可以先通过编程语言(如 Python 或其他支持文件操作的语言)读取该 JSON 文件并将其内容作为字符串插入到指定表内的 JSON 类型字段里。对于批量导入大量数据的情况,则可能更倾向于利用 `LOAD DATA` 结合自定义脚本的方式实现。 另一种方法是使用命令行工具或其他应用程序接口直接向服务器发送请求完成上传过程。例如,在某些版本的 MySQL/MariaDB 上可以通过本地数据源选项来简化这一流程: ```sql -- 假设有一个名为 'my_table' 的表格以及一个用于保存 JSON 文档的列 'json_column' INSERT INTO my_table (id, json_column) VALUES (NULL, LOAD_FILE('/path/to/your/file.json')); ``` 需要注意的是,上述 SQL 语句中的 `/path/to/your/file.json` 应替换为实际存在的绝对路径,并确保 MySQL 用户有足够的权限访问此位置[^1]。 #### 解析与查询 JSON 数据 一旦 JSON 数据被成功存入数据库内之后,就可以运用内置函数来进行检索和分析工作了。比如提取特定键对应的值、遍历数组结构或是执行条件筛选等复杂逻辑均能轻松达成。下面列举了一些常用的语法示例供参考: - 获取单层对象属性: ```sql SELECT JSON_UNQUOTE(JSON_EXTRACT(json_data, '$.key')) AS value FROM table_name; ``` - 访问嵌套的对象成员: ```sql SELECT JSON_UNQUOTE(JSON_EXTRACT(json_data, '$.nested.key')) AS nested_value FROM table_name; ``` - 遍历 JSON 数组元素: ```sql WITH RECURSIVE cte AS ( SELECT CAST('["item1", "item2"]' AS JSON) as jdoc, 0 idx UNION ALL SELECT jdoc, idx + 1 FROM cte WHERE JSON_LENGTH(jdoc) > idx ) SELECT JSON_UNQUOTE(JSON_EXTRACT(cte.jdoc, CONCAT('$[', cte.idx, ']'))) element FROM cte LIMIT 1000 OFFSET 0 ; ``` 以上代码片段展示了如何基于递归公用表达式(CTE)迭代处理列表类型的 JSON 字段。 此外,当面对较为复杂的场景时,还可以考虑借助第三方库或框架的帮助,像 common-schema 就提供了一系列便捷的操作手段以便更好地管理和操纵这类非关系型数据格式[^3]。 #### 性能优化建议 针对含有大量 JSON 内容的大规模应用环境而言,合理的索引设计至关重要。尽管官方并不推荐对整个 JSON 列建立全文搜索引擎,但对于频繁使用的子集部分则完全可以创建虚拟生成列配合常规 B-tree 索引来加速查找效率。同时也要注意控制好每条记录所占用的空间大小以免造成不必要的浪费。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值