MySQL 语句解析json字符串

目录

[1. 提取 JSON 值](#1. 提取 JSON 值)

[2. 提取嵌套 JSON 值](#2. 提取嵌套 JSON 值)

[3. 提取 JSON 数组中的值](#3. 提取 JSON 数组中的值)

[4. 更新 JSON 值](#4. 更新 JSON 值)

[5. 检查 JSON 值是否存在](#5. 检查 JSON 值是否存在)

[6. 将 JSON 数据转换为表格形式](#6. 将 JSON 数据转换为表格形式)

实际案例


在 MySQL 5.7 及以上版本中,可以使用内置的 JSON 函数来解析 JSON 格式的字符串。以下是一些常见的操作和示例:

1. 提取 JSON 值

使用 JSON_EXTRACT() 函数或 -> 操作符从 JSON 字符串中提取值。

示例:

sql复制

复制代码
SELECT JSON_EXTRACT(json_column, '$.key') AS value
FROM table_name;

或者使用 -> 操作符:

复制代码
SELECT json_column->'$.key' AS value
FROM table_name;

解释:

  • json_column 是存储 JSON 数据的列名。

  • '$.key' 是 JSON 路径表达式,用于指定要提取的键。

2. 提取嵌套 JSON 值

如果 JSON 数据是嵌套的,可以使用更复杂的路径表达式。

示例:

复制代码
SELECT JSON_EXTRACT(json_column, '$.nested.key') AS nested_value
FROM table_name;

3. 提取 JSON 数组中的值

如果 JSON 数据是数组,可以使用索引来提取特定位置的值。

示例:

复制代码
SELECT JSON_EXTRACT(json_column, '$[0]') AS first_element
FROM table_name;

4. 更新 JSON 值

使用 JSON_SET() 函数来更新 JSON 数据中的值。

示例:

复制代码
UPDATE table_name
SET json_column = JSON_SET(json_column, '$.key', 'new_value')
WHERE condition;

5. 检查 JSON 值是否存在

使用 JSON_CONTAINS() 函数来检查 JSON 数据中是否包含某个值。

示例:

复制代码
SELECT *
FROM table_name
WHERE JSON_CONTAINS(json_column, '"value"', '$.key');

6. 将 JSON 数据转换为表格形式

如果需要将 JSON 数据转换为表格形式,可以结合 JSON_EXTRACT()CROSS JOIN 来实现。

示例:

复制代码
SELECT 
  JSON_EXTRACT(json_column, '$.key1') AS key1,
  JSON_EXTRACT(json_column, '$.key2') AS key2
FROM table_name;

实际案例

假设有一个表 users,其中有一列 profile 存储 JSON 数据:

id profile
1 {"name": "Alice", "age": 30}
2 {"name": "Bob", "age": 25}

提取 name 字段:

复制代码
SELECT id, JSON_EXTRACT(profile, '$.name') AS name
FROM users;

结果:

id name
1 Alice
2 Bob

提取 age 字段:

复制代码
SELECT id, profile->'$.age' AS age
FROM users;

结果:

id age
1 30
2 25

更新 age 字段:

复制代码
UPDATE users
SET profile = JSON_SET(profile, '$.age', 31)
WHERE id = 1;

检查 name 是否为 "Alice":

复制代码
SELECT *
FROM users
WHERE JSON_CONTAINS(profile, '"Alice"', '$.name');

其他资料:

StarRocks语句解析json字符串的方法-CSDN博客

MySQL时间函数详解-CSDN博客

MySQL中生成随机数的方法-CSDN博客

mysql定时任务-事件调度器(Event Scheduler)_mysql event scheduler-CSDN博客

修改mysql的group_concat函数长度限制,解决数据莫名其妙丢失问题_修改group concat长度之后无效-CSDN博客

相关推荐
倔强的石头_1 天前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
jiayou642 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
于眠牧北2 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
李广坤3 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Turnip12024 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
爱可生开源社区4 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1774 天前
《从零搭建NestJS项目》
数据库·typescript
加号35 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏5 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐5 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端