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

相关推荐
一只叫煤球的猫39 分钟前
MySQL 8.0 SQL优化黑科技,面试官都不一定知道!
后端·sql·mysql
寒山李白1 小时前
MySQL安装与配置详细讲解
数据库·mysql·配置安装
文牧之1 小时前
PostgreSQL 的扩展pg_freespacemap
运维·数据库·postgresql
deriva2 小时前
某水表量每15分钟一报,然后某天示数清0了,重新报示值了 ,如何写sql 计算每日水量
数据库·sql
Leo.yuan3 小时前
数据库同步是什么意思?数据库架构有哪些?
大数据·数据库·oracle·数据分析·数据库架构
zhangzhangkeji3 小时前
(33)课54--??:3 张表的 join-on 连接举例,多表查询总结。
mysql
Kookoos3 小时前
ABP VNext 与 Neo4j:构建基于图数据库的高效关系查询
数据库·c#·.net·neo4j·abp vnext
云之兕3 小时前
MyBatis 的动态 SQL
数据库·sql·mybatis
gaoliheng0063 小时前
Redis看门狗机制
java·数据库·redis