JSON 函数
JSON 创建函数
- JSON_ARRAY(): 创建 JSON 数组
SELECT JSON_ARRAY(1, "abc", NULL, TRUE, CURDATE());
| JSON_ARRAY(1, ‘abc’, NULL, true, CURDATE()) | |
|---|---|
| 1 | [1, “abc”, null, true, “2023-07-29”] |

- JSON_OBJECT(): 创建 JSON 对象
SELECT JSON_OBJECT('id', 87, 'name', 'GaussDB');
| JSON_OBJECT(‘id’, 87, ‘name’, ‘GaussDB’) | |
|---|---|
| 1 | {“id”: 87, “name”: “GaussDB”} |

JSON 搜索函数
- JSON_CONTAINS(target, candidate[, path]): 判断是否包含特定的 JSON 文档,返回值为
0 或 1。
SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}';
SET @j2 = '{"d": 4}';
SELECT JSON_CONTAINS(@j, @j2, '$.a');
| JSON_CONTAINS(@j, @j2, ‘$.a’) | |
|---|---|
| 1 | 0 |

SELECT JSON_CONTAINS(@j, @j2, '$.c')
| JSON_CONTAINS(@j, @j2, ‘$.c’) | |
|---|---|
| 1 | 1 |

- JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] …): 判断给定 path/paths 中是否包含 JSON 文档,返回值为 0 或 1。
SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}';
SELECT JSON_CONTAINS_PATH(@j, 'one', '$.c.d');
| JSON_CONTAINS_PATH(@j, ‘one’, ‘$.c.d’) | |
|---|---|
| 1 | 1 |

SELECT JSON_CONTAINS_PATH(@j, 'one', '$.a.d');
| JSON_CONTAINS_PATH(@j, ‘one’, ‘$.a.d’) | |
|---|---|
| 1 | 0 |

- JSON_EXTRACT(json_doc, path[, path] …): 从 JSON 文档中返回特定路径的内容。
SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[2][*]');
| JSON_EXTRACT(’[10, 20, [30, 40]]’, ‘$[2][*]’) | |
|---|---|
| 1 | [30, 40] |

- JSON_KEYS(json_doc[, path]): 返回 JSON 对象的 KEY 值,返回一个数组。
SELECT JSON_KEYS('{"a": 1, "b": {"c": 30}}');
| JSON_KEYS(’{“a”: 1, “b”: {“c”: 30}}’) | |
|---|---|
| 1 | [“a”, “b”] |

JSON 修改函数
- JSON_ARRAY_APPEND(json_doc, path, val[, path, val] …): 将值追加到 JSON 文档中指定数组的末尾并返回结果。
SET @j = '{"a": 1, "b": [2, 3], "c": 4}';
SELECT JSON_ARRAY_APPEND(@j, '$.b', 'x');
| JSON_ARRAY_APPEND(@j, ‘$.b’, ‘x’) | |
|---|---|
| 1 | {“a”: 1, “b”: [2, 3, “x”], “c”: 4} |

SELECT JSON_ARRAY_APPEND(@j, '$.c', 'y')
| JSON_ARRAY_APPEND(@j, ‘$.c’, ‘y’) | |
|---|---|
| 1 | {“a”: 1, “b”: [2, 3], “c”: [4, “y”]} |

SET @j = '{"a": 1}';
SELECT JSON_ARRAY_APPEND(@j, '$', 'z');
| JSON_ARRAY_APPEND(@j, ‘$’, ‘z’) | |
|---|---|
| 1 | [{“a”: 1}, “z”] |

- JSON_ARRAY_INSERT(json_doc, path, val[, path, val] …): 更新 JSON 文档,向文档中插入数组并返回修改后的文档。
SET @j = '["a", {"b": [1, 2]}, [3, 4]]';
SELECT JSON_ARRAY_INSERT(@j, '$[1].b[0]', 'x');
| JSON_ARRAY_INSERT(@j, ‘$[1].b[0]’, ‘x’) | |
|---|---|
| 1 | [“a”, {“b”: [“x”, 1, 2]}, [3, 4]] |

SELECT JSON_ARRAY_INSERT(@j, '$[0]', 'x', '$[2][1]', 'y');
| JSON_ARRAY_INSERT(@j, ‘[2][1]’, ‘y’) | |
|---|---|
| 1 | [“x”, “a”, {“b”: [1, 2]}, [3, 4]] |

- JSON_INSERT(json_doc, path, val[, path, val] …): 向 JSON 文档中插入数据并返回结果。如果路径下已包含值,则不进行插入操作,即不会覆盖已经存在的值。
SET @j = '{ "a": 1, "b": [2, 3]}';
SELECT JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]');
| JSON_INSERT(@j, ‘.c’, ‘[true, false]’) | |
|---|---|
| 1 | {“a”: 1, “b”: [2, 3], “c”: “[true, false]”} |

SELECT JSON_INSERT(@j, '$.a', 10, '$.c', CAST('[true, false]' AS JSON));
| JSON_INSERT(@j, ‘.c’, CAST(’[true, false]’ AS JSON)) | |
|---|---|
| 1 | {“a”: 1, “b”: [2, 3], “c”: [true, false]} |

- JSON_SET(json_doc, path, val[, path, val] …): 向 JSON 文档中插入或更新数据并返回结果。
- 说明:
- JSON_SET():替换已存在的值,添加不存在的值。
- JSON_INSERT():若已存在值则忽略,若不存在则插入新值。
- JSON_REPLACE():只替换已存在的值。
SET @j = '{ "a": 1, "b": [2, 3]}';
SELECT JSON_SET(@j, '$.a', 10, '$.c', '[true, false]');
| JSON_SET(@j, ‘.c’, ‘[true, false]’) | |
|---|---|
| 1 | {“a”: 10, “b”: [2, 3], “c”: “[true, false]”} |

SELECT JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]');
| JSON_INSERT(@j, ‘.c’, ‘[true, false]’) | |
|---|---|
| 1 | {“a”: 1, “b”: [2, 3], “c”: “[true, false]”} |

SELECT JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]');
| JSON_REPLACE(@j, ‘.c’, ‘[true, false]’) | |
|---|---|
| 1 | {“a”: 10, “b”: [2, 3]} |

JSON 属性函数
- JSON_DEPTH(json_doc): 返回 JSON 文档最大深度。
SELECT JSON_DEPTH('[10, {"a": 20}]');
| JSON_DEPTH(’[10, {“a”: 20}]’) | |
|---|---|
| 1 | 3 |

- JSON_LENGTH(json_doc[, path]): 返回 JSON 文档的长度,若指定了路径,则返回指定路
径元素长度。
SELECT JSON_LENGTH('[1, 2, {"a": 3}]');
| JSON_LENGTH(’[1, 2, {“a”: 3}]’) | |
|---|---|
| 1 | 3 |

SELECT JSON_LENGTH('{"a": 1, "b": {"c": 30}}', '$.b');
| JSON_LENGTH(’{“a”: 1, “b”: {“c”: 30}}’, ‘$.b’) | |
|---|---|
| 1 | 1 |

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




