Подробное объяснение и практическое использование функций MYSQL JSON (полная коллекция функций JSON, включая примеры)

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.

22. Поиск JSON_SEARCH

23. JSON_SET вставить или обновить данные.

24. JSON_STORAGE_FREE освобождает место

25. Количество байт, занимаемых JSON_STORAGE_SIZE.

26. JSON_TABLE Извлечение данных

27. JSON_TYPE Получить тип

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: массив JSON
  • BOOLEAN: логическое значение JSON
  • NULL: JSON null 值
  • INTEGER: MySQL TINYINTSMALLINTMEDIUMINT,INT сумма BIGINT 类形的值
  • DOUBLE: MySQL DOUBLEЯпонский FLOAT Список категорий
  • DECIMAL: MySQL DECIMAL 和 NUMERIC 类形值
  • DATETIME: MySQL DATETIME 和 TIMESTAMP 类形值
  • DATE: MySQL DATE Список категорий
  • TIME: MySQL TIME Список категорий
  • STRING: MySQL CHARVARCHARTEXTENUM сумма SET
  • BLOB: MySQL BINARYVARBINARYBLOB или 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\""

Supongo que te gusta

Origin blog.csdn.net/imwucx/article/details/133915525
Recomendado
Clasificación