# JSON_PATCH

> 在 StackQL 中使用 SQL 对 JSON 文档应用 JSON MergePatch，以修改或合并 JSON 对象。

Source: https://stackql.io/zh-hans/language-spec/functions/json/json_patch

对 JSON 文档应用 JSON MergePatch（RFC-7396），按指定的操作对其进行修改。此函数用于添加、修改或删除 JSON 对象中的元素，但将 JSON 数组视为原子单元。

另请参阅：  
[[`SELECT`]](/language-spec/select) [[` JSON_EXTRACT `]](/language-spec/functions/json/json_extract)

* * * 

## 语法

```sql
SELECT JSON_PATCH(target_json, patch_json) FROM <multipartIdentifier>;
```

## 参数

__*target_json*__  
要应用补丁的 JSON 文档。

__*patch_json*__  
一个 JSON 文档，描述要按照 MergePatch 算法应用的更改。

## 返回值
返回应用补丁后经过修改的 JSON 文档。

* * *

## 示例

### 简单的 MergePatch

```sql
-- Example: Simple merge of new elements into the target JSON object
SELECT JSON_PATCH('{"a":1,"b":2}', '{"c":3,"d":4}') AS patched_json;
```

输出：`{"a":1,"b":2,"c":3,"d":4}`

### 替换数组中的元素

```sql
-- Example: Replacing an array with a single value in the JSON object
SELECT JSON_PATCH('{"a":[1,2],"b":2}', '{"a":9}') AS patched_json;
```

输出：`{"a":9,"b":2}`

### 使用 null 移除元素

```sql
-- Example: Removing an element by setting it to null
SELECT JSON_PATCH('{"a":1,"b":2}', '{"a":9,"b":null,"c":8}') AS patched_json;
```

输出：`{"a":9,"c":8}`

### 嵌套的 MergePatch

```sql
-- Example: Nested merge patch updating sub-keys within a nested JSON object
SELECT JSON_PATCH('{"a":{"x":1,"y":2},"b":3}', '{"a":{"y":9},"c":8}') AS patched_json;
```

输出：`{"a":{"x":1,"y":9},"b":3,"c":8}`

此功能可以对存储在数据库中的 JSON 进行灵活的动态更新，对于需要按条件修改数据结构的应用尤其有用。
