mysql操作json的函数
时间: 2025-06-18 10:50:46 浏览: 19
### MySQL JSON 函数列表及用法
#### 1. 插入和更新 JSON 数据
- **JSON_ARRAY**
创建一个新的数组类型的 JSON 文档。
```sql
SELECT JSON_ARRAY('apple', 'banana', 'orange');
```
- **JSON_OBJECT**
构建一个对象形式的 JSON 字符串,键值对由参数指定。
```sql
SELECT JSON_OBJECT('name', 'John', 'age', 30);
```
- **JSON_SET**
更新现有 JSON 值中的字段或向其添加新字段;如果路径不存在,则创建它。
```sql
SET @j = '{"name": "Jane", "age": 28}';
SELECT JSON_SET(@j, '$.location', 'Beijing') AS updated_json;
```
- **JSON_INSERT**
向现有的 JSON 文档中插入新的成员而不覆盖任何已有条目。仅当目标位置为空时才生效。
```sql
SET @j = '{}';
SELECT JSON_INSERT(@j, '$.id', 1, '$.title', 'Introduction to SQL') AS inserted_json;
```
- **JSON_REPLACE**
替换已经存在于给定 JSON 数组或对象里的特定项。不会增加新的元素到文档里。
```sql
SET @j = '{"price": 9.99, "quantity": 5}';
SELECT JSON_REPLACE(@j, '$.price', 4.99) AS replaced_json;
```
#### 2. 提取 JSON 数据
- **-> 和 ->> 操作符**
使用 `->` 可返回带引号的结果字符串,而 `->>` 则会去掉外层的双引号并尝试解析内部结构为数值或其他类型的数据。
```sql
SET @j = '{"product": {"name": "Widget", "price": 42}}';
SELECT @j->'$.product.name'; -- 返回 '"Widget"'
SELECT @j->>'$.product.price'; -- 返回 42 (无引号)
```
- **JSON_EXTRACT**
获取嵌套于 JSON 对象内的具体属性值。支持多级访问语法 `$`.
```sql
SET @j = '[{"item":"book","cost":3.5},{"item":"pen","cost":1}]';
SELECT JSON_UNQUOTE(JSON_EXTRACT(@j, '$[1].item')) AS item_name; -- pen
```
- **JSON_CONTAINS_PATH**
验证某个 JSON 表达式的路径是否存在。
```sql
SET @j = '{ "store": { "fruit": ["apple", "pear"] } }';
SELECT JSON_CONTAINS_PATH(@j, 'one', '$.store.fruit'); -- true
```
- **JSON_KEYS**
返回指定 JSON 对象的所有顶级键名称组成的集合。
```sql
SET @j = '{"a": 1, "b": 2, "c": null}';
SELECT JSON_KEYS(@j); -- ['a', 'b', 'c']
```
#### 3. 删除 JSON 数据
- **JSON_REMOVE**
移除位于某路径下的节点及其子树。
```sql
SET @j = '{"person": {"firstName": "John", "lastName": "Doe"}}';
SELECT JSON_REMOVE(@j, '$.person.firstName') AS modified_json;
```
#### 4. 合并与转换 JSON 数据
- **JSON_MERGE_PRESERVE / JSON_MERGE_PATCH**
将两个以上的 JSON 文档合并成单个文档。前者保留重复键,后者则遵循 RFC 7396 标准处理冲突。
```sql
SET @doc1 = '{"x": 1, "y": 2}', @doc2 = '{"z": 3, "w": 4}';
SELECT JSON_MERGE_PRESERVE(@doc1, @doc2) AS merged_docs_preserve;
```
上述介绍涵盖了主要的操作 JSON 数据所需的功能[^1]。对于更复杂的应用场景,还可以探索其他辅助性的查询语句来满足需求。
阅读全文
相关推荐


















