# **JSON\_SET**

添加或更新JSON中指定位置的值并返回新的对象。

指定路径存在值时更新值，不存在时插入新的值，如果传入的值为null，那么将在JSON中保留null值，如果希望传递null值时删除值，可以使用`JSON_REMOVE`函数。

此函数可运行于浏览器端、后端服务器端或SQL中，在SQL中此函数依赖数据库本身对JSON类型的支持能力，虽然大部分数据库都支持JSON数据类型，但可能部分数据库支持的不完善，因此会不支持此函数或只支持部分能力。在更新字段值时（如程序流的更新数据交互中）用户无需直接使用此函数更新字段，由于模型层已经明确定义了JSON字段的内部结构，用户只需要设置需要更新的JSON内部的部分KEY对应的值即可，系统内部会自动使用数据库底层的JSON字段增量更新能力只更新JSON中需要更新的值。

## 语法{#grammar}

JSON\_SET(**json**, **path1**, **value1**,..., **pathN**, **valueN**)

- **json**：必需，JSON对象或数组，或其字符串形式。
- **path**：必需，指定路径，可以是数组索引下标、JSON的KEY或者是[JSON\_PATH](../../types.md#json)语法表示的路径。
- **value**：必需，需要设置的值，可以传递多个path与value的参数对，实现同时更新多个值。

## 示例{#example}

1. `JSON_SET('{"key1": 123, "key2": 456}', 'key3', 789)` 返回JSON`{"key1": 123, "key2": 456, "key3": 789}`
2. `JSON_SET(JSON_OBJECT("key1", 123, "key2", 456), 'key2', 1)` 返回JSON`{"key1": 123, "key2": 1}`
