当前位置: 首页 > news >正文

【MySQL】MySQL中的函数之JSON_REPLACE

在 MySQL 中,JSON_REPLACE() 函数用于在 JSON 文档中替换现有的值。如果指定的路径不存在,则 JSON_REPLACE() 不会修改 JSON 文档。如果需要添加新的键值对,可以使用 JSON_SET() 函数。

基本语法

JSON_REPLACE(json_doc, path, val[, path, val] ...)
  • json_doc: 要修改的 JSON 文档。
  • path: 要替换的值的路径。
  • val: 要设置的新值。

示例

假设有一个表 users,其中有一个字段 data 存储了用户的 JSON 数据:

CREATE TABLE users (id INT PRIMARY KEY,data JSON
);INSERT INTO users (id, data) VALUES
(1, '{"name": "Alice", "age": 30, "city": "New York"}'),
(2, '{"name": "Bob", "age": 25, "city": "Los Angeles"}');
示例 1: 替换单个值

假设我们要将 id 为 1 的用户的年龄从 30 改为 35:

UPDATE users
SET data = JSON_REPLACE(data, '$.age', 35)
WHERE id = 1;

查询结果:

SELECT * FROM users;

输出结果:

+----+--------------------------------------------------+
| id | data                                             |
+----+--------------------------------------------------+
| 1  | {"name": "Alice", "age": 35, "city": "New York"} |
| 2  | {"name": "Bob", "age": 25, "city": "Los Angeles"}|
+----+--------------------------------------------------+
示例 2: 替换多个值

假设我们要将 id 为 2 的用户的年龄从 25 改为 30,并将城市从 “Los Angeles” 改为 “San Francisco”:

UPDATE users
SET data = JSON_REPLACE(data, '$.age', 30, '$.city', 'San Francisco')
WHERE id = 2;

查询结果:

SELECT * FROM users;

输出结果:

+----+-----------------------------------------------------------+
| id | data                                                      |
+----+-----------------------------------------------------------+
| 1  | {"name": "Alice", "age": 35, "city": "New York"}          |
| 2  | {"name": "Bob", "age": 30, "city": "San Francisco"}       |
+----+-----------------------------------------------------------+
示例 3: 替换嵌套值

假设 JSON 数据中包含嵌套的对象:

INSERT INTO users (id, data) VALUES
(3, '{"name": "Charlie", "age": 35, "address": {"street": "123 Main St", "city": "Chicago"}}');

我们可以替换嵌套对象 address 中的 street

UPDATE users
SET data = JSON_REPLACE(data, '$.address.street', '456 Elm St')
WHERE id = 3;

查询结果:

SELECT * FROM users;

输出结果:

+----+-----------------------------------------------------------------+
| id | data                                                            |
+----+-----------------------------------------------------------------+
| 1  | {"name": "Alice", "age": 35, "city": "New York"}                |
| 2  | {"name": "Bob", "age": 30, "city": "San Francisco"}             |
| 3  | {"name": "Charlie", "age": 35, "address": {"street": "456 Elm St", "city": "Chicago"}} |
+----+-----------------------------------------------------------------+
示例 4: 替换数组中的值

假设 JSON 数据中包含一个数组:

INSERT INTO users (id, data) VALUES
(4, '{"name": "David", "age": 40, "hobbies": ["reading", "traveling", "cooking"]}');

我们可以替换数组 hobbies 中的第一个值:

UPDATE users
SET data = JSON_REPLACE(data, '$.hobbies[0]', 'writing')
WHERE id = 4;

查询结果:

SELECT * FROM users;

输出结果:

+----+-----------------------------------------------------------------------+
| id | data                                                                  |
+----+-----------------------------------------------------------------------+
| 1  | {"name": "Alice", "age": 35, "city": "New York"}                      |
| 2  | {"name": "Bob", "age": 30, "city": "San Francisco"}                   |
| 3  | {"name": "Charlie", "age": 35, "address": {"street": "456 Elm St", "city": "Chicago"}} |
| 4  | {"name": "David", "age": 40, "hobbies": ["writing", "traveling", "cooking"]} |
+----+-----------------------------------------------------------------------+

注意事项

  • 如果指定的路径不存在,JSON_REPLACE() 不会修改 JSON 文档。
  • 如果需要添加新的键值对,应使用 JSON_SET() 函数。
  • JSON_REPLACE() 只能替换现有路径的值,不能创建新路径。

组合使用

JSON_REPLACE() 通常与其他 JSON 函数结合使用,以便更灵活地处理 JSON 数据。例如,你可以先使用 JSON_EXTRACT() 提取值,然后使用 JSON_REPLACE() 修改值。

http://www.lryc.cn/news/486628.html

相关文章:

  • 【大数据学习 | HBASE高级】hbase的API操作
  • C++(Qt)软件调试---内存泄漏分析工具MTuner (25)
  • python核心语法
  • MATLAB用CNN-LSTM神经网络的语音情感分类深度学习研究
  • 智能网页内容截图工具:AI助力内容提取与可视化
  • Axure设计之文本编辑器制作教程
  • 【MyBatis源码】深入分析TypeHandler原理和源码
  • 号卡分销系统,号卡系统,物联网卡系统源码安装教程
  • 常用命令之LinuxOracleHivePython
  • 从dos上传shell脚本文件到Linux、麒麟执行报错“/bin/bash^M:解释器错误:没有那个文件或目录”
  • 使用 Go 实现将任何网页转化为 PDF
  • 文件操作和IO
  • 【C++滑动窗口】1248. 统计「优美子数组」|1623
  • C语言导航 4.1语法基础
  • 使用 Python 和 Py2Neo 构建 Neo4j 管理脚本
  • Centos 7 安装wget
  • 定时器的小应用
  • linux企业中常用NFS、ftp服务
  • 数据结构与算法分析模拟试题及答案5
  • .NET 9.0 中 System.Text.Json 的全面使用指南
  • Python自动检测requests所获得html文档的编码
  • 11.12机器学习_特征工程
  • RAG经验论文《FACTS About Building Retrieval Augmented Generation-based Chatbots》笔记
  • 【配置后的基本使用】CMake基础知识
  • ollama+springboot ai+vue+elementUI整合
  • 【项目开发】理解SSL延迟:为何HTTPS比HTTP慢?
  • 2.STM32之通信接口《精讲》之USART通信
  • Bootstrap和jQuery开发案例
  • Qt 之 qwt和QCustomplot对比
  • 【STM32】MPU6050简介