阿里云首页 云原生数据湖分析 DLA

JSON函数

本文档主要对JSON函数进行了说明。

JSON_ARRAY_CONTAINS

命令格式

json_array_contains(json,value)

命令说明

判断JSON参数中是否包含value指定的值。

返回值类型

BOOLEAN

示例

  select json_array_contains('[1, 2, 3]', 2);
  +-----------------------------------------+
  |                    1                    |

JSON_ARRAY_GET

命令格式

json_array_get(json_array,index)

命令说明

根据index取值,返回json_array中的指定元素。

  • index >= 0时,从json_array左侧开始返回指定元素。

  • index < 0时,从json_array右侧开始返回指定元素。

  • index指定的元素不存在时,返回结果为NULL

返回值类型

VARCHAR

示例

  select json_array_get('["a", "b", "c"]', 1) as result;
  +-----------------------------------------------+
  |                       b                       |

JSON_ARRAY_LENGTH

命令格式

json_array_length(json)

命令说明

返回JSON数组的长度。

返回值类型

BIGINT

示例

  select json_array_length('[1, 2, 3]')
  +-----------------------------------+
  |                 3                 |

JSON_EXTRACT

命令格式

json_extract(json,json_path)

命令说明

JSON中返回json_path指定的值,json_path格式为$[n]

  • 如果n < 0,系统将提示错误。

  • 如果n为大于0的无效参数时,返回结果为NULL

返回值类型

JSON

示例

  select json_extract('[10, 20, [30, 40]]', '$[1]');
  +------------------------------------------------+
  |                      20                        |

JSON_EXTRACT_SCALAR

命令格式

json_extract_scalar(json,json_path)

命令说明

JSON中返回json_path指定的值,json_path格式为$[n]

  • 如果n < 0,系统将提示错误。

  • 如果n为大于0的无效参数时,返回结果为NULL

返回值类型

VARCHAR

示例

  select json_extract_scalar('[10, 20, [30, 40]]', '$[1]');
  +------------------------------------------------------+
  |                        20                            |
  select json_extract_scalar('[10, 20, [30, 40]]', '$[0]');
  +------------------------------------------------------+
  |                        10                            |

JSON_ARRAY_EXTRACT/JSON_ARRAY_EXTRACT_SCALAR

命令格式

json_array_extract(json,jsonPath)

命令说明

JSON中返回json_path指定的值。

返回值类型

VARCHAR(数组形式的字符串)

示例

  select json_array_extract(arr1, '$.book.id') as a 
  from (values ('[{"book":{"id":"12"}}, {"book":{"id":"14"}}]')) t(arr1);

返回结果:["12", "14"]

  select json_array_extract_scalar(arr1, '$.book.id') as a 
  from (values ('[{"book":{"id":"12"}}, {"book":{"id":"14"}}]')) t(arr1);

返回结果:[12, 14]

JSON_FORMAT

命令格式

json_format(json)

返回值类型

VARCHAR

示例

  select json_format(JSON '[1, 2, 3]');
  +-----------------------------------+
  |             [1,2,3]               |

JSON_PARSE

命令格式

json_parse(string)

命令说明

string解析为JSON类型,并返回结果。

返回值类型

JSON

示例

  select json_parse('[1, 2, 3]');
  +----------------------------+
  |           [1,2,3]          |
  select json_parse('"a"');
  +-----------------------+
  |           "a"         |

JSON_SIZE

命令格式

json_size(json,json_path)

命令说明

返回JSON的大小。

示例

  select json_size('{"x":{"a":1, "b": 2}}', '$.x') as result;
  +---------------------------------------------------------+
  |                            2                            |
  json_size('{"x": {"a": 1, "b": 2}}', '$.x.a') as result; 
  +------------------------------------------------------+
  |                          0                           |

JSON_REMOVE

命令格式

json_remove(json_string,json_path_string)
json_remove(json_string,array[json_path_string])

命令说明

返回json_string中去除json_path_string之后的数据,可以通过array[json_path_string]一次性指定多个json_path_string

返回值类型

VARCHAR(JSON格式的字符串)

示例

  select json_remove(
  '{
      "glossary": {
          "title": "example glossary",
          "GlossDiv": {
              "title": "S",
              "GlossList": {
                  "GlossEntry": {
                      "ID": "SGML",
                      "SortAs": "SGML",
                      "GlossTerm": "Standard Generalized Markup Language",
                      "Acronym": "SGML",
                      "Abbrev": "ISO 8879:1986",
                      "GlossDef": {
                          "para": "A meta-markup language, used to create markup languages such as DocBook.",
                          "GlossSeeAlso": ["GML", "XML"]
                      },
                      "GlossSee": "markup"
                  }
              }
          }
      }
  }'
  , '$.glossary.GlossDiv') a;

返回结果:{"glossary":{"title":"example glossary"}}

  select json_remove(
  '{
      "glossary": {
          "title": "example glossary",
          "GlossDiv": {
              "title": "S",
              "GlossList": {
                  "GlossEntry": {
                      "ID": "SGML",
                      "SortAs": "SGML",
                      "GlossTerm": "Standard Generalized Markup Language",
                      "Acronym": "SGML",
                      "Abbrev": "ISO 8879:1986",
                      "GlossDef": {
                          "para": "A meta-markup language, used to create markup languages such as DocBook.",
                          "GlossSeeAlso": ["GML", "XML"]
                      },
                      "GlossSee": "markup"
                  }
              }
          }
      }
  }'
  , array['$.glossary.title', '$.glossary.GlossDiv.title']) a;

返回结果:

{"glossary":{"GlossDiv":{"GlossList":{"GlossEntry":{"GlossTerm":"Standard Generalized Markup Language","GlossSee":"markup","SortAs":"SGML","GlossDef":{"para":"A meta-markup language, used to create markup languages such as DocBook.","GlossSeeAlso":["GML","XML"]},"ID":"SGML","Acronym":"SGML","Abbrev":"ISO 8879:1986"}}}}}

JSON_RESERVE

命令格式

json_reserve(json_string,json_path_string)
json_reserve(json_string,array[json_path_string])

命令说明

返回json_stringjson_path_string指定的数据,可以通过array[json_path_string]一次性指定多个json_path_string

返回值类型

VARCHAR(JSON格式的字符串)

示例

  select json_reserve(
  '{
      "glossary": {
          "title": "example glossary",
          "GlossDiv": {
              "title": "S",
              "GlossList": {
                  "GlossEntry": {
                      "ID": "SGML",
                      "SortAs": "SGML",
                      "GlossTerm": "Standard Generalized Markup Language",
                      "Acronym": "SGML",
                      "Abbrev": "ISO 8879:1986",
                      "GlossDef": {
                          "para": "A meta-markup language, used to create markup languages such as DocBook.",
                          "GlossSeeAlso": ["GML", "XML"]
                      },
                      "GlossSee": "markup"
                  }
              }
          }
      }
  }'
  , array['$.glossary.title']) a;

返回结果:{"glossary":{"title":"example glossary"}}

  select json_reserve(
  '{
      "glossary": {
          "title": "example glossary",
          "GlossDiv": {
              "title": "S",
              "GlossList": {
                  "GlossEntry": {
                      "ID": "SGML",
                      "SortAs": "SGML",
                      "GlossTerm": "Standard Generalized Markup Language",
                      "Acronym": "SGML",
                      "Abbrev": "ISO 8879:1986",
                      "GlossDef": {
                          "para": "A meta-markup language, used to create markup languages such as DocBook.",
                          "GlossSeeAlso": ["GML", "XML"]
                      },
                      "GlossSee": "markup"
                  }
              }
          }
      }
  }'
  , array['$.glossary.title', '$.glossary.GlossDiv.title', '$.glossary.GlossDiv.GlossList.GlossEntry.ID']) a;

返回结果:

{"glossary":{"title":"example glossary","GlossDiv":{"GlossList":{"GlossEntry":{"ID":"SGML"}},"title":"S"}}}

JSON_EXTRACT_VALUR_COMPARE

命令格式

json_extract_value_compare(json, json_path, value_to_compare, operator)

命令说明

根据JSON中提取字段值的类型进行自动类型转化后与value_to_compare值比较。

  • json:待提取值的JSON字符串。

  • json_path:提取json path表达式。

  • value_to_compare:需要进行比较的目标值字符串。目前仅支持字符串,如果json_path中提取的值类型是数值型,该函数先自动将value_to_compare中的字符串转换成数值型,再与value_to_compare进行比较。

  • operator:比较操作符,支持LT或<、GT或>、 LTE或<=、GTE或>=、E或=、NE或!=或<>,不区分大小写。

返回值类型

BOOLEAN

示例

select json_extract_value_compare('{"key":223}', '$.key', '9','gt');
+------------------------------------------------------------+
//223为数值型,先将'9'会转换成数值9,再与223进行比较,等价于223>9,返回值为1。
|                                 1                          |
select json_extract_value_compare('{"key":"223"}', '$.key', '9', '>');
+------------------------------------------------------------+
//"223"为字符型,将"223"与"9"进行字符串比较,等价于"223">"9",返回值为0。
|                                 0                          |