【MySQL】MySQL中的函数之JSON_REPLACE

server/2024/11/19 3:15:26/

在 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.ppmy.cn/server/143059.html

相关文章

React--》如何高效管理前端环境变量:开发与生产环境配置详解

在前端开发中,如何让项目在不同环境下表现得更为灵活与高效,是每个开发者必须面对的挑战,从开发阶段的调试到生产环境的优化,环境变量配置无疑是其中的关键。 env配置文件:通常用于管理项目的环境变量,环境…

java 读取 有时需要sc.nextLine();读取换行符 有时不需要sc.nextLine();读取换行符 详解

在 Java 中,使用 Scanner 类读取输入时,换行符的处理行为取决于所用的读取方法。不同方法的工作原理会影响是否需要额外调用 sc.nextLine() 来清理缓冲区中的换行符。 核心问题 根本原因:Scanner 是基于输入流工作的,而换行符&am…

Python中的with语句

with语句和上下文管理器 Python提供了 with 语句的写法,既简单又安全 文件操作的时候使用with语句可以自动调用关闭文件操作,即使出现异常也会自动关闭文件操作。 # 1、以写的方式打开文件 with open(1.txt, w) as f:# 2、读取文件内容f.write(hello wor…

关于网络安全里蜜罐的详细介绍

蜜罐的定义 蜜罐的一个定义来自间谍世界,玛塔哈里 (Mata Hari) 式的间谍将恋爱关系用作窃取秘密的方式,被描述为设置“美人计”或“蜜罐”。经常会有敌方间谍中了美人计,然后被迫交待他/她所知道的一切。 在计算机安全方面,网络…

kafka可视化管理平台-kafka-console-ui

安装包 kafka可视化管理平台 一款轻量级的kafka可视化管理平台,安装配置快捷、简单易用。 为了开发的省事,没有国际化支持,页面只支持中文展示。 用过rocketmq-console吧,对,前端展示风格跟那个有点类似。 你的安装好…

Centos安装Elasticsearch教程

网上相关的安装教程有很多,基本是官网下载、解压、启动完事了,本文主要记录个人在实际安装过程终于到的问题,如果你刚好也刷到了这篇文档,希望对你有所帮助。 操作系统版本:Centos7Elasticsearch版本:7.9.3…

Python爬虫下载新闻,Flask展现新闻(2)

上篇讲了用Python从新闻网站上下载新闻,本篇讲用Flask展现新闻。关于Flask安装网上好多教程,不赘述。下面主要讲 HTML-Flask-数据 的关系。 简洁版 如图,页面简单,主要显示新闻标题。 分页,使用最简单的分页技术&…

云渲染与云电脑,应用场景与技术特点全对比

很多朋友问,你们家一会宣传云渲染,一会宣传云电脑的,我到底用哪个?今天,渲染101云渲染和川翔云电脑就来对比下两者的区别! 渲染101&川翔云电脑,都是我们的产品,邀请码6666 一、…