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博客

相关推荐
TG_yunshuguoji28 分钟前
阿里云国际代理:阿里云的云数据库是什么?
服务器·数据库·安全·阿里云·云计算
程序猿 董班长1 小时前
springboot配置多数据源(mysql、hive)
hive·spring boot·mysql
huazhixuthink2 小时前
PostgreSQL三种关闭方式的区别
数据库·postgresql
阿里小阿希6 小时前
Vue3 + Element Plus 项目中日期时间处理的最佳实践与数据库设计规范
数据库·设计规范
且行志悠7 小时前
Mysql的使用
mysql
白鹭7 小时前
MySQL源码部署(rhel7)
数据库·mysql
666和7777 小时前
Struts2 工作总结
java·数据库
还听珊瑚海吗8 小时前
SpringMVC(一)
数据库