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 分钟前
构建基于MCP的MySQL智能运维平台:从开源服务端到交互式AI助手
运维·mysql·开源·mcp
Elastic 中国社区官方博客2 分钟前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
仍然.6 分钟前
MYSQL--- 聚合查询,分组查询和联合查询
数据库
一 乐11 分钟前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
啦啦啦_999913 分钟前
Redis-0-业务逻辑
数据库·redis·缓存
自不量力的A同学1 小时前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.1 小时前
Mysql
数据库·mysql
全栈前端老曹1 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集
R1nG8631 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
阿钱真强道2 小时前
12 JetLinks MQTT直连设备事件上报实战(继电器场景)
linux·服务器·网络·数据库·网络协议