MySQL предоставляет множество функций JSON для различной обработки данных JSON. Ниже приведены некоторые часто используемые функции JSON.
Рекомендуется сохранить его для дальнейшего использования.
Оглавление
1. JSON_EXTRACT извлекает указанные данные.
2. JSON_UNQUOTE отменить двойные кавычки
3. JSON_KEYS получает массив членов.
4. JSON_ARRAY преобразует параметры в массивы.
5. Преобразуйте параметры JSON_OBJECT в объекты.
6. JSON_DEPTH принимает глубину JSON.
7. JSON_LENGTH получает длину узла.
8. JSON_CONTAINS определяет, содержит ли он
9. JSON_ARRAY_APPEND добавляет значение
10. JSON_ARRAY_INSERT Вставить значение в указанную позицию.
11. JSON_CONTAINS_PATH определяет, существует ли он.
12. JSON_INSERT вставить данные
13. JSON_MERGE Несколько слияний JSON
14. JSON_MERGE_PATCH Множественная замена и объединение JSON
15. JSON_MERGE_PRESERVE Несколько слияний JSON
16. JSON_OVERLAPS определяет, есть ли одинаковые ключи или значения.
17. Вывод в формате JSON_PRETTY
18. JSON_REMOVE удаляет указанные данные.
19. Данные замены JSON_REPLACE
20. JSON_SCHEMA_VALID Проверьте документ JSON.
21. JSON_SCHEMA_VALIDATION_REPORT Проверьте документ JSON.
23. JSON_SET вставить или обновить данные.
24. JSON_STORAGE_FREE освобождает место
25. Количество байт, занимаемых JSON_STORAGE_SIZE.
26. JSON_TABLE Извлечение данных
28. JSON_VALID проверяет правильность
29. JSON_VALUE извлекает значение указанного пути.
30. Является ли MEMBER OF элементом массива?
31. JSON_QUOTE упакован в строку JSON.
1. JSON_EXTRACT извлекает указанные данные.
MySQL JSON_EXTRACT()
Функция извлекает данные, указанные выражением пути, из документа JSON и возвращает их.
грамматика:
JSON_EXTRACT(json, path, ...)
Описание параметра:
- json: требуется. Документ JSON.
- путь: обязателен. Укажите хотя бы одно выражение пути.
возвращаемое значение:
- Возвращает все значения в документе JSON, соответствующие выражению пути.
- Вернуть NULL-случай:
- Указанный путь не существует.
- Любой параметр
NULL
.
- Отчет об ошибках:
json
не является допустимым документом JSON.path
не является допустимым выражением пути.
Пример:
SELECT JSON_EXTRACT('[1, 2, {"x": 3}]', '$[1]'); // 2
SELECT JSON_EXTRACT('[1, 2, {"x": 3}]', '$[2]'); // {"x": 3}
2. JSON_UNQUOTE отменить двойные кавычки
Функция MySQL JSON_UNQUOTE()
выключает кавычки из значения JSON и возвращает результат в виде строки.
грамматика:
JSON_UNQUOTE(json_val)
Описание параметра:
json_val:
Необходимый. строка.
возвращаемое значение:
- Удалите значения JSON из кавычек, используя двойные кавычки
- Возврат NULL: параметр
NULL。
报错情况:
Недопустимый строковый литерал JSON. Распознаются escape-символы из следующей таблицы:- \": двойные кавычки
"
\b
:退格字符
\f
:换页符
\n
:换行符
\r
:回车符
\t
:制表符
\\
:反斜杠 \
\uXXXX
:Unicode 值 XXXX 的 UTF-8 字节
- \": двойные кавычки
Пример:
SELECT JSON_UNQUOTE('"123456"'); // 123456
SELECT JSON_UNQUOTE(CAST('"cxian"' AS JSON)); // cxian
Функция CASE преобразует строку в тип JSON. Подробнее о функции CASE см.:https://cxian.blog.csdn.net/article/details/134231729.
3. JSON_KEYS получает массив членов.
MySQL JSON_KEYS()
Функция возвращает массив, содержащий элемент верхнего уровня (ключ) указанного объекта JSON.
грамматика:
JSON_KEYS(json)
JSON_KEYS(json, path)
Описание параметра:
-
json
: Необходимый. Объектный документ JSON. -
path
: Необязательный. выражение пути.
возвращаемое значение:
- Возвращает массив, содержащий самый верхний элемент (ключ) указанного объекта JSON.
- Если указано выражение пути, возвращается массив, состоящий из верхних элементов объекта JSON, соответствующих выражению пути.
- возвращаться
NULL情况:
- Без пути документ JSON не является объектом JSON.
- Путь существует, и значение JSON, соответствующее этому пути, не является объектом JSON.
- Произвольный ссылочный номер
NULL
.
- Отчет об ошибках:
-
json
не является допустимым документом JSON. path
не является допустимым выражением пути.
-
Пример:
SELECT JSON_KEYS('{"a": 1, "b": 2, "c": 3}'); // ["a", "b", "c"]
SELECT JSON_KEYS('[1, {"a": 1, "b": 2, "c": 3}]', '$[1]'); // ["a", "b", "c"]
SELECT
JSON_KEYS('1'), // null
JSON_KEYS('"true"'), // null
JSON_KEYS('"abc"'), // null
JSON_KEYS('[0, 1]'); // null
4. JSON_ARRAY преобразует параметры в массивы.
MySQL JSON_ARRAY()
Функция возвращает массив JSON, содержащий все параметры.
грамматика:
JSON_ARRAY(value1[, value2[, ...]])
Описание параметра:
-
value1[, value2[, ...]]
: Необязательный. Некоторые значения будут помещены в массив JSON.
возвращаемое значение:
- Массив JSON, содержащий все параметры.
- ценность конверсии:
- TRUE преобразуется в true
- ЛОЖЬ преобразуется в ложь.
- NULL преобразуется в ноль
- Дата, время, дата и время преобразуются в строки
Пример:
SELECT JSON_ARRAY(1, '1', NULL, TRUE, FALSE, NOW()); // [1, "1", null, true, false, "2023-11-05 16:58:34.000000"]
SELECT JSON_ARRAY(JSON_ARRAY(1, 2), JSON_ARRAY('a', 'b')); // [[1, 2], ["a", "b"]]
5. Преобразуйте параметры JSON_OBJECT в объекты.
MySQL JSON_OBJECT()
Функция возвращает объект JSON, содержащий все пары ключ-значение, указанные в параметрах.
грамматика:
JSON_OBJECT(key, value[, key2, value2, ...])
Описание параметра:
- ключ: обязателен. Ключ в объекте.
- значение: обязательно. Значение ключа в объекте.
возвращаемое значение:
- Объект JSON, содержащий все пары ключ-значение.
- Отчет об ошибках:
key
даNULL。
- Нечетное количество параметров.
Пример:
SELECT JSON_OBJECT('name', 'cxian', 'age', 22); // {"age": 22, "name": "cxian"}
SELECT JSON_OBJECT('name', 'cxian', 'age', 22, 'age', 33); // {"age": 33, "name": "cxian"}
6. JSON_DEPTH принимает глубину JSON.
Функция MySQL JSON_DEPTH()
возвращает максимальную глубину документа JSON.
грамматика:
JSON_DEPTH(json)
Описание параметра:
-
json
: Необходимый. Документ JSON.
возвращаемое значение:
- Максимальная глубина документа JSON. Правила следующие:
- Пустой массив, пустой объект или чистое значение имеют глубину 1.
- Массив, содержащий только элементы глубины 1, имеет глубину 2.
- Объект с глубиной 1 для всех значений членов имеет глубину 2.
- Все остальные документы JSON имеют глубину больше 2.
- Ответить
NULL情况:
Номер возвратаNULL。
报错情况:
Параметр не является допустимым документом JSON.
Пример:
SELECT
JSON_DEPTH('[]'), // 1
JSON_DEPTH('[1, 2]'), // 2
JSON_DEPTH('[1, [2, 3]]'); // 3
7. JSON_LENGTH получает длину узла.
MySQL JSON_LENGTH()
Функция возвращает длину документа JSON или узла, указанного путем в документе JSON.
грамматика:
JSON_LENGTH(json)
JSON_LENGTH(json, path)
Описание параметра:
-
json
: Необходимый. Документ JSON. -
path
: Необязательный. Выражение пути.
возвращаемое значение:
- С путем: Возвращает длину значения, указанного путем в документе JSON.
- Нет пути: возвращает длину документа JSON.
- Правила расчета длины JSON-документа:
- Длина чистого значения равна 1.
- Длина массива — это количество элементов массива.
- Длина объекта — это количество членов объекта.
- Встроенные массивы или объекты не участвуют в вычислении длины.
- возвращаться
NULL情况:
- Указанный путь не существует.
- Любой параметр
NULL
.
- Отчет об ошибках:
json
не является допустимым документом JSON.path
не является допустимым выражением пути.path
включительно*
или**。
Пример:
SELECT
JSON_LENGTH('1'), // 1
JSON_LENGTH('true'), // 1
JSON_LENGTH('false'), // 1
JSON_LENGTH('null'), // 1
JSON_LENGTH('"a"'); // 1
JSON_LENGTH('[]'), // 0
JSON_LENGTH('[1, 2]'), // 2
JSON_LENGTH('[1, {"x": 2}]'); // 2
8. JSON_CONTAINS определяет, содержит ли он
Функция MySQL JSON_CONTAINS()
проверяет, содержит ли документ JSON другой документ JSON.
грамматика:
JSON_CONTAINS(target_json, candidate_json)
JSON_CONTAINS(target_json, candidate_json, path)
Описание параметра:
-
target_json
Необходимый. Документ JSON. -
candidate_json
: Необходимый. Включенный документ JSON. -
path
: Необязательный. Выражение пути.
возвращаемое значение:
- Содержит: Возвращает 1.
- Не включено: возвращает 0.
- возвращаться
NULL情况:
- Указанный путь не существует в документе JSON.
- Любой параметр
NULL
.
- Отчет об ошибках:
json
не является допустимым документом JSON.path
не является допустимым выражением пути.
Пример:
SELECT
JSON_CONTAINS('[1, 2, {"x": 3}]', '1'), // 1
JSON_CONTAINS('[1, 2, {"x": 3}]', '{"x": 3}'), // 1
JSON_CONTAINS('[1, 2, {"x": 3}]', '3'), // 0
JSON_CONTAINS('[1, 2, [3, 4]]', '2'), // 1
JSON_CONTAINS('[1, 2, [3, 4]]', '2', '$[2]'); // 0
9. JSON_ARRAY_APPEND добавляет значение
Функция MySQL JSON_ARRAY_APPEND()
добавляет значение к указанному массиву в документе JSON и возвращает измененный документ JSON.
грамматика:
JSON_ARRAY_APPEND(json, path, value[, path2, value2] ...)
Описание параметра:
-
json
: Необходимый. Измененный документ JSON. -
path
: обязательно. Добавляет путь к новому элементу. Допустимое выражение пути, оно не может содержать*
или**
. -
value
: Необходимый. Значение нового элемента, добавляемого в массив.
возвращаемое значение:
- Прикрепленный документ JSON.
- Вернуть
NULL情况:
документ JSON или путьNULL。
报错情况:
json
не является допустимым документом JSON.path
не является допустимым выражением пути или содержит*
или**。
Пример:
SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$', 4); // [1, 2, 3, 4]
SELECT JSON_ARRAY_APPEND('[1, [2, 3]]', '$[0]', 4); // [[1, 4], [2, 3]]
SELECT JSON_ARRAY_APPEND('[1, [2, 3]]', '$[1]', 4); // [1, [2, 3, 4]]
SELECT JSON_ARRAY_APPEND('{"name": "Tim", "hobby": ["car"]}', '$.hobby', "food"); // {"name": "Tim", "hobby": ["car", "food"]}
SELECT JSON_ARRAY_APPEND('1', '$', 2); // [1, 2]
10. JSON_ARRAY_INSERT Вставить значение в указанную позицию.
MySQL JSON_ARRAY_INSERT()
Функция вставляет значение в указанный массив документа JSON в указанную позицию и возвращает новый документ JSON.
грамматика:
JSON_ARRAY_INSERT(json, path, value[, path2, value2] ...)
Описание параметра:
-
json:
Необходимый. Измененный документ JSON. -
path:
Обязательно. Позиция элемента массива, в которую вставляется новый элемент. Допустимое выражение пути, оно не может содержать*
или**
. Например,$[0]
и$.a[0]
указывают на вставку нового элемента в начало массива. -
value
: Необходимый. Значение нового элемента, вставляемого в массив.
возвращаемое значение:
- Вставленный документ JSON.
- Вернуть
NULL情况:
документ JSON или путьNULL。
报错情况:
json
не является допустимым документом JSON.path
не является допустимым выражением пути или содержит*
или**。
path
указывает путь, который не является элементом массива.
Пример:
set @str = '[1, [2, 3], {"a": [4, 5]}]'
SELECT
JSON_ARRAY_INSERT(@str, '$[0]', 0), // [0, 1, [2, 3], {"a": [4, 5]}]
JSON_ARRAY_INSERT(@str, '$[1]', 0), // [1, 0, [2, 3], {"a": [4, 5]}]
JSON_ARRAY_INSERT(@str, '$[2]', 0), // [1, [2, 3], 0, {"a": [4, 5]}]
JSON_ARRAY_INSERT(@str, '$[1][0]', 0), // [1, [0, 2, 3], {"a": [4, 5]}]
JSON_ARRAY_INSERT(@str, '$[2].a[0]', 0); // [1, [2, 3], {"a": [0, 4, 5]}]
11. JSON_CONTAINS_PATH определяет, существует ли он.
Функция MySQL JSON_CONTAINS_PATH()
проверяет, существует ли значение по указанному пути в документе JSON.
грамматика:
JSON_CONTAINS_PATH(json, one_or_all, path[, path])
Описание параметра:
-
json
: Необходимый. Документ JSON. -
one_or_all
: обязательно. Доступные значения:'one'
,'all'
. Он указывает, следует ли проверять все пути. -
path
: Необходимый. Вы должны указать хотя бы одно выражение пути.
возвращаемое значение:
- Возвращает 1, если есть значение, и 0 в противном случае.
- Описание параметра one_or_all:
- «один»: если на каком-либо пути есть значение, верните 1, в противном случае верните 0.
- «все»: все пути имеют значения, возвращайте 1, в противном случае возвращайте 0.
- Отчет об ошибках:
json
не является допустимым документом JSON.path
не является допустимым выражением пути.
Пример:
SELECT
JSON_CONTAINS_PATH('[1, 2, {"x": 3}]', 'all', '$[0]'), // 1
JSON_CONTAINS_PATH('[1, 2, {"x": 3}]', 'all', '$[3]'), // 0
JSON_CONTAINS_PATH('[1, 2, {"x": 3}]', 'all', '$[2].x'), // 1
JSON_CONTAINS_PATH('[1, 2, {"x": 3}]', 'one', '$[0]', '$[3]'), // 1
JSON_CONTAINS_PATH('[1, 2, {"x": 3}]', 'all', '$[0]', '$[3]'); // 0
12. JSON_INSERT вставить данные
Функция MySQL JSON_INSERT()
вставляет данные в документ JSON и возвращает новый документ JSON.
грамматика:
JSON_INSERT(json, path, value[, path2, value2] ...)
Описание параметра:
-
json
: Необходимый. Измененный документ JSON. -
path
: обязательно. Допустимое выражение пути, оно не может содержать*
или**
. -
value
: Необходимый. Данные вставляются.
возвращаемое значение:
- Вставленный документ JSON. (Если он уже существует, он не будет вставлен)
path
для$:返回原JSON文档。
- Вернуть
NULL情况:
документ JSON или путьNULL。
报错情况:
json
не является допустимым документом JSON.path
не является допустимым выражением пути или содержит*
или**。
Пример:
SET @arr = '[1, [2, 3], {"a": [4, 5]}]';
SELECT JSON_INSERT(@arr, '$[0]', 0, '$[3]', 6); // [1, [2, 3], {"a": [4, 5]}, 6]
SET @obj = '{"x": 1}';
SELECT JSON_INSERT(@obj, '$.y', '2'); // {"x": 1, "y": "2"}
13. JSON_MERGE Несколько слияний JSON
Функция MySQL JSON_MERGE()
объединяет два или более документа JSON и возвращает объединенный результат.
грамматика:
JSON_MERGE(json1, json2, ...)
Описание параметра:
-
json1
: Необходимый. Объектный документ JSON. -
json2
: Необходимый. Объектный документ JSON.
возвращаемое значение:
- Новый объединенный документ JSON.
- Возврат
NULL情况:
Любой параметрNULL。
- Ошибка: параметр не является допустимым документом JSON.
Пример:
SELECT JSON_MERGE('1', 'true', '"hello"', 'null'); // [1, true, "hello", null]
SELECT JSON_MERGE('[1, 2]', '[2, 3]'); // [1, 2, 2, 3]
SELECT JSON_MERGE('{"x": 1}', '{"x": 2, "y": 3}'); // {"x": [1, 2], "y": 3}
SELECT JSON_MERGE('{"x": 1}', '[1, 2]'); // [{"x": 1}, 1, 2]
14. JSON_MERGE_PATCH Множественная замена и объединение JSON
Функция MySQL JSON_MERGE_PATCH()
выполняет заменяющее слияние двух или более документов JSON и возвращает объединенный результат.
Слияние замены: если значение ключа одинаковое, сохраняется только более позднее значение.
грамматика:
JSON_MERGE_PATCH(json1, json2, ...)
Описание параметра:
-
json1
: Необходимый. Объектный документ JSON. -
json2
: Необходимый. Объектный документ JSON.
возвращаемое значение:
- Объединенный документ JSON.
- Правила слияния следующие:
- Если первый параметр не является объектом, результат слияния такой же, как и результат слияния пустых объектов со вторым параметром.
- Если второй параметр не является объектом, объединенным результатом будет второй параметр.
- Если оба параметра являются объектами, объединенный объект имеет следующие элементы:
- Члены, существующие только в первом объекте.
- существует только во втором объекте, и это значение не является членом
null
. - существует во втором объекте, а значение не
null
, и в первом объекте есть соответствующий элемент с тем же ключом.
- возвращаться
NULL情况:任意一个参数为NULL。
报错情况:
Ни один из параметров не является допустимым документом JSON.
Пример:
SELECT
JSON_MERGE_PATCH('2', 'true'), // true
JSON_MERGE_PATCH('[1, 2]', '[2, 3]'), // [2, 3]
JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "y": 3}'), // {"x": 2, "y": 3, "z": 7}
JSON_MERGE_PATCH('{"x": 1, "z": 7}', '{"x": 2, "z": null}'); // {"x": 2}
15. JSON_MERGE_PRESERVE Несколько слияний JSON
Функция MySQL JSON_MERGE_PRESERVE()
объединяет два или более документа JSON и возвращает объединенный результат.
Эта функция используется так же, как JSON_MERGE_PATCH(), но логика слияния другая.
Различные правила объединяются следующим образом:
- Объединяет два массива в один, сохраняя все элементы массивов.
- Два объекта объединяются в один, сохраняя все ключи и значения.
- Чистое значение заворачивается в массив и объединяется как массив.
- Когда объекты и массивы объединяются, объекты заключаются в массив и объединяются как массивы.
Пример:
SELECT
JSON_MERGE_PRESERVE('2', 'true'), // [2, true]
JSON_MERGE_PRESERVE('[1, 2]', '[2, 3]'), // [1, 2, 2, 3]
JSON_MERGE_PRESERVE('{"x": 1, "z": 7}', '{"x": 2, "y": 3}'), // {"x": [1, 2], "y": 3, "z": 7}
JSON_MERGE_PRESERVE('{"x": 1, "z": 7}', '{"x": 2, "z": null}'); // {"x": [1, 2], "z": [7, null]}
16. JSON_OVERLAPS определяет, есть ли одинаковые ключи или значения.
Функция MySQL JSON_OVERLAPS()
проверяет, имеют ли два документа JSON идентичные пары ключ-значение или элементы массива.
грамматика:
JSON_OVERLAPS(json1, json2)
Описание параметра:
-
json1
: Необходимый. Документ JSON. -
json2
: Необходимый. Еще один документ JSON.
возвращаемое значение:
- Два документа JSONПерекрывающееся содержимое возвращает 1, в противном случае возвращает 0.
- Правила оценки функции следующие:
- При сравнении двух массивов, если в них есть хотя бы один идентичный элемент, верните
1
, в противном случае верните0
. - При сравнении двух объектов, если эти два объекта имеют хотя бы одну идентичную пару ключ-значение, верните
1
, в противном случае верните0
. - При сравнении двух чистых значений, если они одинаковы, верните
1
, в противном случае верните0
. - При сравнении чистого значения с массивом верните
1
, если значение является прямым элементом массива, в противном случае верните0
. - Результатом сравнения чистых значений и объектов является
0
. - Результатом сравнения массивов и объектов является
0
.
- При сравнении двух массивов, если в них есть хотя бы один идентичный элемент, верните
- Ответить
NULL情况:
Номер возвратаNULL。
报错情况:
Ни один из параметров не является допустимым документом JSON.
Пример:
SELECT
JSON_OVERLAPS('[1, 2, 3]', '[3, 4, 5]'), // 1
JSON_OVERLAPS('[1, 2, [3]]', '[3, 4, 5]'), // 0
JSON_OVERLAPS('{"x": 1}', '{"x": 1, "y": 2}'), // 1
JSON_OVERLAPS('{"x": 1}', '{"y": 2}'), // 0
JSON_OVERLAPS('[1, 2, 3]', '3'), // 1
JSON_OVERLAPS('[1, 2, [3]]', '3'); // 0
17. Вывод в формате JSON_PRETTY
Функция MySQL JSON_PRETTY()
форматирует вывод документа JSON, чтобы его было легче читать.
грамматика:
JSON_PRETTY(json)
Описание параметра:
-
json
: Необходимый. Документ JSON или значение типа JSON.
возвращаемое значение:
- Выходной документ в формате JSON, легко читаемый.
Пример:
SELECT JSON_PRETTY('[1, 2, 3]');
[
1,
2,
3
]
SELECT JSON_PRETTY('{"x": 1, "y": 2}');
{
"x": 1,
"y": 2
}
18. JSON_REMOVE удаляет указанные данные.
Функция MySQL JSON_REMOVE()
удаляет данные, указанные по пути, из документа JSON и возвращает измененный документ JSON.
грамматика:
JSON_REMOVE(json, path[, path] ...)
Описание параметра:
-
json
: Необходимый. Документ JSON. -
path
: обязательно. Допустимое выражение пути, оно не может содержать*
или**
.
возвращаемое значение:
- Удаленный документ JSON.
- Вернуть
NULL情况:
документ JSON или путьNULL。
报错情况;
json
не является допустимым документом JSON.path
не является допустимым выражением пути, равен$
или содержит*
или**
Пример:
SELECT
JSON_REMOVE('[0, 1, 2, [3, 4]]', '$[0]', '$[2]'), // [1, 2]
JSON_REMOVE('{"x": 1, "y": 2}', '$.x'); // {"y": 2}
19. Данные замены JSON_REPLACE
Функция MySQL JSON_REPLACE()
заменяет существующие данные в документе JSON и возвращает новый документ JSON.
грамматика:
JSON_REPLACE(json, path, value[, path2, value2] ...)
Описание параметра:
-
json
: Необходимый. Измененный документ JSON. -
path
: обязательно. Допустимое выражение пути, оно не может содержать*
или**
. -
value
: Необходимый. новые данные.
возвращаемое значение:
- Замененный документ JSON.
- Вернуть
NULL情况:
документ JSON или путьNULL。
- Отчет об ошибках:
json
не является допустимым документом JSON.path
не является допустимым выражением пути или содержит*
или**。
Пример:
SET @arr = '[1, [2, 3]]';
SELECT
JSON_REPLACE(@arr, '$[0]', 0, '$[2]', 6), // [0, [2, 3]]
JSON_REPLACE(@arr, '$[0]', 0, '$[1]', 6); // [0, 6]
SET @obj = '{"x": 1}';
SELECT
JSON_REPLACE(@obj, '$.x', 'true', '$.y', 'true'); // {"x": "true"}
JSON_REPLACE(@obj, '$.x', '[1, 2]'), // {"x": "[1, 2]"}
JSON_REPLACE(@obj, '$.x', JSON_ARRAY(1,2)); // {"x": [1, 2]}
20. JSON_SCHEMA_VALID Проверьте документ JSON.
MySQL JSON_SCHEMA_VALID()
Функция проверяет документ JSON на основе указанной схемы JSON и возвращает 1
, проверена ли таблица, или возвращает < a i= 3> означает, что проверка не удалась. 0
грамматика:
JSON_SCHEMA_VALID(schema, json_doc)
Описание параметра:
-
schema
: Необходимый. Схема JSON. Это должен быть действительный объект JSON. -
json_doc
: Необходимый. Документ JSON проверяется.
возвращаемое значение:
-
1
: документ JSON прошел проверку. -
0
: документ JSON не прошел проверку. - Возврат
NULL情况:
Любой параметрNULL。
Пример:
SET @schema = '{
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": -128,
"maximum": 127
},
"y": {
"type": "number",
"minimum": -128,
"maximum": 127
}
},
"required": ["x", "y"]
}';
SELECT
JSON_SCHEMA_VALID(@schema, '{"x": 1}'), // 0
JSON_SCHEMA_VALID(@schema, '{"x": 1, "y": 2}') // 1
21. JSON_SCHEMA_VALIDATION_REPORT Проверьте документ JSON.
Функция MySQL JSON_SCHEMA_VALIDATION_REPORT()
проверяет документ JSON на основе указанной схемы JSON и возвращает отчет о проверке.
грамматика:
JSON_SCHEMA_VALIDATION_REPORT(schema, json_doc)
Описание параметра:
-
schema
: Необходимый. Схема JSON. Это должен быть действительный объект JSON. -
json_doc
: Необходимый. Документ JSON проверяется.
возвращаемое значение:
- Отчет о результатах проверки.
- {"действительно": true}: проверка пройдена.
- {"действительный": false, причина:'...'}: проверка не удалась, причина является причиной сбоя.
Пример:
SET @schema = '{
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"y": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": ["x", "y"]
}';
SELECT
JSON_SCHEMA_VALIDATION_REPORT(@schema, '{"x": 1}'), // {"valid": false, "reason": "The JSON document location '#' failed requirement 'required' at JSON Schema location '#'", "schema-location": "#", "document-location": "#", "schema-failed-keyword": "required"}
JSON_SCHEMA_VALIDATION_REPORT(@schema, '{"x": 1, "y": 2}') // {"valid": true}
22. Поиск JSON_SEARCH
MySQL JSON_SEARCH()
Функция возвращает путь к заданной строке в документе JSON.
грамматика:
JSON_SEARCH(json, one_or_all, search_str)
JSON_SEARCH(json, one_or_all, search_str, escape_char)
JSON_SEARCH(json, one_or_all, search_str, escape_char, path)
Описание параметра:
-
json
: Необходимый. Документ JSON. -
one_or_all
: Необходимо. Доступно:'one'
,'all'
. 规则郎下:'one':
Возвращает первый соответствующий путь.'all':
Возвращает все совпадающие пути. Все пути будут возвращены в массиве.
-
search_str
: обязательно. Строка, которую нужно найти. Вы можете использовать подстановочные знаки и в параметреsearch_str
, как LIKE :%
_
%
Соответствует любому количеству любых символов._
Соответствует любому персонажу.
-
escape_char
: необязательно. Еслиsearch_str
содержит%
и_
, перед ними необходимо добавить символы перехода. По умолчанию используется\
. -
path
: Необязательный. Поиск можно выполнять только по этому пути.
возвращаемое значение:
- Строка пути или массив путей.
- возвращаться
NULL情况:
- Указанная строка не найдена.
- Указанное не существует в документе JSON.
path。
- Любой параметр
NULL。
报错情况:
json
не является допустимым документом JSON.path
не является допустимым выражением пути.
Пример:
SET @json = '{
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"y": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": ["x", "y"]
}';
SELECT
JSON_SEARCH(@json, 'one','number'), // "$.properties.x.type"
JSON_SEARCH(@json, 'all','number') // ["$.properties.x.type", "$.properties.y.type"]
23. JSON_SET вставить или обновить данные.
Функция MySQL JSON_SET() вставляет или обновляет данные в документ JSON и возвращает новый документ JSON. Это эквивалентно комбинации JSON_INSERT() и JSON_REPLACE().
грамматика:
JSON_SET(json, path, value[, path2, value2] ...)
Описание параметра:
-
json
: Необходимый. Измененный документ JSON. -
path
: обязательно. Допустимое выражение пути, оно не может содержать*
или**
. -
value
: Необходимый. Данные для установки.
возвращаемое значение:
- Вставьте или обновите данные и верните новый документ JSON. Правила следующие:
- Путь существует: обновить.
- Путь не существует: добавьте.
- Если
value
является строкой: вставьте напрямую. - Вернуть
NULL情况:
документ JSON или путьNULL。
报错情况:
json
не является допустимым документом JSON.path
не является допустимым выражением пути или содержит*
или**。
Пример:
SET @obj = '{"x": 1}';
SELECT
JSON_SET(@obj, '$.x', '10', '$.y', '[1, 2]'), // {"x": "10", "y": "[1, 2]"}
JSON_SET(@obj, '$.x', '10', '$.y', '{"z": 2}'), // {"x": "10", "y": "{\"z\": 2}"}
JSON_SET(@obj, '$.x', '10', '$.y', CAST('[1, 2]' AS JSON)); // {"x": "10", "y": [1, 2]}
24. JSON_STORAGE_FREE освобождает место
Функция MySQL JSON_STORAGE_FREE() возвращает пространство, освобожденное после обновления столбца JSON с помощью JSON_SET(), JSON_REPLACE() или JSON_REMOVE().
грамматика:
JSON_STORAGE_FREE(json)
Описание параметра:
-
json
: Необходимый. Документ JSON. Это может быть строка JSON или столбец JSON.
возвращаемое значение:
- Пространство, освобождаемое после обновления столбца JSON с помощью JSON_SET(), JSON_REPLACE() или JSON_REMOVE(). Он может принимать строку JSON или столбец JSON в качестве параметра.
- Вернуть 0 случай:
- Параметр представляет собой строку JSON.
- Столбец не был обновлен или не был обновлен частично с помощью JSON_SET(), JSON_REPLACE() или JSON_REMOVE().
- После обновления контента стало больше
。
- Возвращает пространство, освобожденное после обновления: столбец (столбец таблицы базы данных) был частично обновлен с помощью JSON_SET(), JSON_REPLACE() или JSON_REMOVE().
- Ответить
NULL情况:
Номер возвратаNULL。
报错情况:json
не является допустимым документом JSON.
Пример:
DROP TABLE IF EXISTS test;
CREATE TABLE test (
json_col JSON NOT NULL
);
INSERT INTO test
VALUES ('{"x": 1, "y": "99"}');
SELECT
json_col, // {"x": 1, "y": "99"}
JSON_STORAGE_SIZE(json_col), // 24
JSON_STORAGE_FREE(json_col) // 0
FROM
test;
// {"x": 1, "y": "99"} | 24 | 0
UPDATE test
SET json_col = JSON_REMOVE(json_col, '$.y');
SELECT
json_col, // {"x": 1}
JSON_STORAGE_SIZE(json_col), // 24
JSON_STORAGE_FREE(json_col) // 11
FROM
test;
25. Количество байт, занимаемых JSON_STORAGE_SIZE.
MySQL JSON_STORAGE_SIZE()
Функция возвращает количество байтов, используемых для хранения двоичного представления документа JSON.
грамматика:
JSON_STORAGE_SIZE(json)
Описание параметра:
-
json
: Необходимый. Документ JSON. Это может быть строка JSON или столбец JSON.
возвращаемое значение:
- Количество байтов, занимаемых двоичным представлением документа JSON.
- Ответить
NULL:
Номер возвратаNULL。
- Отчет об ошибке:
json
не является допустимым документом JSON.
Пример:
SELECT
JSON_STORAGE_SIZE('100'), // 3
JSON_STORAGE_SIZE('"a"'), // 3
JSON_STORAGE_SIZE('true'), // 2
JSON_STORAGE_SIZE('null'); // 2
26. JSON_TABLE Извлечение данных
Функция MySQL JSON_TABLE()
извлекает данные из указанного документа JSON и возвращает реляционную таблицу с указанными столбцами.
грамматика:
JSON_TABLE(
json,
path COLUMNS (column[, column[, ...]])
)
column:
name FOR ORDINALITY
| name type PATH string_path [on_empty] [on_error]
| name type EXISTS PATH string_path
| NESTED [PATH] path COLUMNS (column[, column[, ...]])
on_empty:
{NULL | DEFAULT json_string | ERROR} ON EMPTY
on_error:
{NULL | DEFAULT json_string | ERROR} ON ERROR
Описание параметра:
-
json
: Необходимый. Документ JSON. -
path
: Необходимый. Выражение пути. -
column:
Необходимый. Определите столбец. Столбцы можно определить следующими четырьмя способами:name FOR ORDINALITY
: создайте столбец счетчика, начиная с 1, с именемname
.name type PATH string_path [on_empty] [on_error]
: поместите значение, указанное выражением путиstring_path
, в столбец с именемname
.name type EXISTS PATH string_path
: В зависимости от того, имеет ли позиция, указаннуюstring_path
, значение1
или0
будет помещено в имяname
в столбце.NESTED [PATH] path COLUMNS (column[, column[, ...]])
: свести данные во внедренном объекте или массиве в одну строку.
- on_empty: необязательно. Если указано, он определяет возвращаемое значение, когда по указанному пути нет данных:
- NULL ON EMPTY: если по указанному пути нет данных, функция JSON_TABLE() будет использовать NULL, что является поведением по умолчанию.
- Значение по умолчанию ON EMPTY: если по указанному пути нет данных, функция JSON_TABLE() будет использовать значение.
- ОШИБКА НА ПУСТОМ: если по указанному пути нет данных, функция JSON_TABLE() выдаст ошибку.
- on_error: необязательно. Если указано, он определяет логику обработки ошибок:
- NULL ПРИ ОШИБКЕ: в случае ошибки функция JSON_TABLE() будет использовать NULL, что является поведением по умолчанию.
- Значение ПО УМОЛЧАНИЮ ПРИ ОШИБКЕ: функция JSON_TABLE() будет использовать значение в случае ошибки.
- ОШИБКА ПРИ ОШИБКЕ: функция JSON_TABLE() выдаст ошибку, если она есть.
возвращаемое значение:
- Реляционная таблица с указанными столбцами.
Пример:
SELECT
*
FROM
JSON_TABLE(
'[{"x":10,"y":11}, {"y": 21}, {"x": 30}]',
'$[*]'
COLUMNS (
id FOR ORDINALITY,
x INT PATH '$.x' DEFAULT '100' ON EMPTY,
y INT PATH '$.y'
)
) AS t;
id x y
+------+-------+--------+
| 1| 10| 11|
+-----------------------+
| 2| 100| 21|
+------+-------+--------+
| 2| 30| NULL|
+------+-------+--------+
Пример описания:
- Выражение пути $[*]: каждый элемент массива, то есть два объекта в массиве.
- $[0]: извлечь только первый элемент массива JSON.
- $[1]: извлечь только второй элемент массива JSON.
- и так далее
- Предложение COLUMNS определяет 3 столбца в реляционной таблице:
- id ДЛЯ ПОРЯДОЧНОСТИ: имя столбца — id, а содержимое столбца — это автоматически возрастающая последовательность, начиная с 1.
- x INT PATH '$.x' DEFAULT '100' ON EMPTY: значение по умолчанию 100 используется, когда элемент x не существует в объекте или значение x пусто.
- y INT PATH '$.y: имя столбца — y, а содержимое столбца соответствует элементу y в объекте.
- $ в $.x и $.y представляет текущий объект контекста, которым является каждый объект в массиве.
Пример выравнивания встроенного массива:
SELECT
*
FROM
JSON_TABLE(
'[{"x":10,"y":[11, 12]}, {"x":20,"y":[21, 22]}]',
'$[*]'
COLUMNS (
x INT PATH '$.x',
NESTED PATH '$.y[*]' COLUMNS (y INT PATH '$')
)
) AS t;
x y
+------+-------+
| 10 | 11 |
| 10 | 12 |
| 20 | 21 |
| 20 | 22 |
+------+-------+
Пример описания:
- NESTED PATH '$.y[*]' COLUMNS (y INT PATH '$'): разверните массив, соответствующий
y
и помещает каждый элемент массиваy
в столбец с именемy
.
Сглаживание встроенных объектов:
SELECT
*
FROM
JSON_TABLE(
'[{"x":10,"y":{"a":11,"b":12}},{"x":20,"y":{"a":21,"b":22}}]',
'$[*]'
COLUMNS (
x INT PATH '$.x',
NESTED PATH '$.y' COLUMNS (
ya INT PATH '$.a',
yb INT PATH '$.b'
)
)
) AS t;
x ya yb
+------+-------+-------+
| 10 | 11 | 12 |
| 20 | 21 | 22 |
+------+-------+-------+
Пример описания:
NESTED PATH '$.y'
Предложение извлекает члены объектаy
в 2 столбца:- Член
a
извлекается в столбецya。
- Член
b
извлекается в столбецyb。
- Член
27. JSON_TYPE Получить тип
MySQL JSON_TYPE()
Функция возвращает тип данного значения JSON.
грамматика:
JSON_TYPE(json_value)
Описание параметра:
-
json_value
: Необходимый. Значение JSON.
Возвращаемое значение: ( строка utf8mb4
)
OBJECT
: объект JSON.ARRAY
: массив JSONBOOLEAN
: логическое значение JSONNULL
: JSONnull
值INTEGER
: MySQLTINYINT
,SMALLINT
,MEDIUMINT
,INT
суммаBIGINT
类形的值DOUBLE
: MySQLDOUBLE
ЯпонскийFLOAT
Список категорийDECIMAL
: MySQLDECIMAL
和NUMERIC
类形值DATETIME
: MySQLDATETIME
和TIMESTAMP
类形值DATE
: MySQLDATE
Список категорийTIME
: MySQLTIME
Список категорийSTRING
: MySQLCHAR
,VARCHAR
,TEXT
,ENUM
суммаSET
BLOB
: MySQLBINARY
,VARBINARY
,BLOB
илиBIT
OPAQUE
: Типы, отличные от указанных выше
Пример:
SELECT
JSON_TYPE('true'), // BOOLEAN
JSON_TYPE('null'), // NULL
JSON_TYPE('"abc"'); // STRING
28. JSON_VALID проверяет правильность
MySQL JSON_VALID()
Функция возвращает 0 и 1, чтобы указать, является ли данный аргумент допустимым документом JSON.
грамматика:
JSON_VALID(str)
Описание параметра:
-
str
: Необходимый. Контент, который необходимо проверить.
возвращаемое значение:
- 1: Это документ JSON.
- 0: Не документ JSON.
- Ответить
NULL情况:
Номер возвратаNULL。
Пример:
SELECT
JSON_VALID(1), // 0
JSON_VALID('1'), // 1
JSON_VALID(true), // 0
JSON_VALID('true'), // 1
JSON_VALID('abc'), // 0
JSON_VALID('"abc"'), // 1
JSON_VALID('{"a": 1}'), // 1
JSON_VALID('{a: 1}'); // 0
29. JSON_VALUE извлекает значение указанного пути.
MySQL JSON_VALUE()
Функция извлекает значение указанного пути из указанного документа JSON и возвращает его.
грамматика:
JSON_VALUE(json, path [RETURNING type] [{NULL | ERROR | DEFAULT value} ON EMPTY] [{NULL | ERROR | DEFAULT value} ON ERROR])
Описание параметра:
-
json
: Необходимый. Документ JSON. -
path
: Необходимый. Выражение пути. -
RETURNING type
Необязательный. Он определяет тип возвращаемого значения. Вы можете использовать одно из следующих значений:
FLOAT
DOUBLE
DECIMAL
SIGNED
UNSIGNED
DATE
TIME
DATETIME
YEAR
(MySQL 8.0.22 и новее)CHAR
JSON
{NULL | ERROR | DEFAULT value} ON EMPTY:
Необязательный. Если указано, он определяет возвращаемое значение, если по указанному пути нет данных:
NULL ON EMPTY
: если по указанному пути нет данных, функцияJSON_VALUE()
вернетNULL
, что является поведением по умолчанию.DEFAULT value ON EMPTY
: если по указанному пути нет данных, функцияJSON_VALUE()
вернетvalue
.ERROR ON EMPTY
: Если по указанному пути нет данных, функцияJSON_VALUE()
выдаст ошибку.
{NULL | ERROR | DEFAULT value} ON ERROR:
Необязательный. Если указано, он определяет логику обработки ошибок:NULL ON ERROR
: в случае ошибки функцияJSON_VALUE()
вернетNULL
, что является поведением по умолчанию.DEFAULT value ON ERROR
: В случае ошибки функцияJSON_VALUE()
вернетvalue
.ERROR ON ERROR
: В случае ошибки функцияJSON_VALUE()
выдаст ошибку.
возвращаемое значение:
- данные по пути.
- Сообщается об ошибке:
json
не является допустимым документом JSON.path
не является допустимым выражением пути.
Пример:
SET @json = '[
{
"name": "cxian",
"age": 22,
},
{
"name": "jie",
"age": 23 }
]';
SELECT
JSON_VALUE(@json, '$[0].age'), // 22
JSON_VALUE(@json, '$[1].age'); // 23
JSON_VALUE(@json, '$[1].age' RETURNING DECIMAL(9,2)), // 23.00
JSON_VALUE(@json, '$[0].note' DEFAULT 'Nothing' ON EMPTY) // Nothing
30. Является ли MEMBER OF элементом массива?
Функция MySQL MEMBER OF()
проверяет, является ли указанное значение элементом массива JSON.
грамматика:
value MEMBER OF(value, json_array)
Описание параметра:
-
value
: Необходимый. ценность. Он может быть любого типа. -
json_array
: Необходимый. Массив JSON.
возвращаемое значение:
- 1: json_array содержит значение, или json_array является значением и равен значению.
- 0: Массив не содержит значения.
- Отчет об ошибке:
json_array
не является допустимым документом JSON.
Пример:
SELECT
1 MEMBER OF('[1, 2, "a"]'), // 1
'a' MEMBER OF('"a"'), // 1
CAST('true' AS JSON) MEMBER OF('true') // 1
31. JSON_QUOTE упакован в строку JSON.
Функция MySQL JSON_QUOTE()
использует двойные кавычки для заключения значения в строковое значение JSON.
грамматика:
JSON_QUOTE(str)
Описание параметра:
-
str
: Необходимый. строка.
возвращаемое значение:
- Строковое значение JSON, заключенное в двойные кавычки.
- Ответить
NULL情况:
Номер возвратаNULL。
- Специальные символы будут экранированы обратной косой чертой:
- \": двойные кавычки "
- \b: символ возврата
- \f: символ перевода формы
- \n: символ новой строки
- \r: символ возврата каретки
- \t: символ табуляции
- \\: обратная косая черта \
- \uXXXX: UTF-8 байтов значения Юникода XXXX.
Пример:
SELECT
JSON_QUOTE('1'), // "1"
JSON_QUOTE('NULL'), // "NULL"
JSON_QUOTE('"NULL"') // "\"NULL\""