JSON 表函数

Exisi 2023-01-23 23:11:35
Categories: Tags:

语法

JSON_TABLE(

expr,

path COLUMNS (column_list)

) [AS] alias

 

column_list:

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_list)

 

on_empty:

{NULL | DEFAULT json_string | ERROR} ON EMPTY

 

on_error:

{NULL | DEFAULT json_string | ERROR} ON ERROR

 

参数

描述

expr

这是一个返回 JSON 数据的表达式。这可以是常量 ()、列(,在子句之前指定的给定表)或函数调用 ()。'{"a":1}'t1.json_datat1JSON_TABLE()FROMJSON_EXTRACT(t1.json_data,'$.post.comments')

path

应用于数据源的 JSON 路径表达式。我们将与路径匹配的 JSON 值称为行源;这用于生成一行关系数据。该子句计算行源,在行源中查找特定的 JSON 值,并将这些 JSON 值作为关系数据行的各个列中的 SQL 值返回。COLUMNS 别名是必需的

 column

column支持以下类型的参数

参数类型

描述

name FOR ORDINALITY

此类型枚举子句中的行;名为 name 的列是一个计数器,其类型为 ,其初始值为 1。这等效于在 CREATE TABLE 语句中指定列,并且可用于区分子句生成的多行具有相同值的父行。COLUMNSUNSIGNED INTAUTO_INCREMENTNESTED [PATH]

name type PATH string_path [on_empty] [on_error]

此类型的列用于提取string_path指定的值。type MySQL 标量数据类型(即,它不能是对象或数组)。 将数据提取为JSON,然后强制将其强制为列类型,使用适用于MySQLJSON数据的常规自动类型转换。缺失值将触发on_empty子句。保存对象或数组将触发可选的 on error 子句;当从保存为 JSON 的值强制到表列期间发生错误(例如尝试将字符串保存到整数列)时,也会发生这种情况。JSON_TABLE()'asd'

name type EXISTS PATH path

如果 path 指定的位置存在任何数据,则此列返回 1,否则返回 0type 可以是任何有效的 MySQL 数据类型,但通常应指定为某种类型的 INT

NESTED [PATH] path COLUMNS (column_list)

这会将 JSON 数据中的嵌套对象或数组与父对象或数组中的 JSON 值一起平展为一行。使用多个选项允许将 JSON 值从多个嵌套级别投影到单个行中。PATH

该路径相对于 父路径行路径,或者在嵌套路径的情况下相对于父子句的路径。JSON_TABLE()NESTED [PATH]

on empty

如果指定)确定在数据丢失时执行的操作(取决于类型)。当子句中的列没有匹配项并为其生成补码行时,也会在子句中的列上触发此子句。on empty 采用以下值之一:JSON_TABLE()NESTED PATHNULL

  • NULL ON EMPTY:列设置为 ;这是默认行为。NULL
  • DEFAULT json_string ON EMPTY:提供的json_string将解析为 JSON,只要它有效,并存储而不是缺失的值。列类型规则也适用于默认值。
  • ERROR ON EMPTY:引发错误。

如果使用,on_error取以下值之一,并具有相应的结果,如下所示:

  • NULL ON ERROR:列设置为 ;这是默认行为。NULL
  • DEFAULT json string ON ERRORjson_string解析为 JSON(前提是它有效)并存储,而不是对象或数组。
  • ERROR ON ERROR:引发错误。

 

 

来自 <https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html