跳到主要内容
版本: 最新版本-3.5

JSON 函数和运算符概述

本主题概述了 StarRocks 支持的 JSON 构造函数、查询函数、处理函数、运算符和路径表达式。

提示

通过生成列加速您的查询

JSON 构造函数

JSON 构造函数用于构造 JSON 数据,例如 JSON 对象和 JSON 数组。

函数描述示例返回值
json_object将一个或多个键值对转换为一个 JSON 对象,该对象由键值对组成,并按字典顺序排序。SELECT JSON_OBJECT('Daniel Smith', 26, 'Lily Smith', 25);{"Daniel Smith": 26, "Lily Smith": 25}
json_array将 SQL 数组的每个元素转换为一个 JSON 值,并返回一个由这些 JSON 值组成的 JSON 数组。SELECT JSON_ARRAY(1, 2, 3);[1,2,3]
parse_json将字符串转换为 JSON 值。SELECT PARSE_JSON('{"a": 1}');{"a": 1}

JSON 查询函数和处理函数

JSON 查询函数和处理函数用于查询和处理 JSON 数据。 例如,您可以使用路径表达式来定位 JSON 对象中的元素。

函数描述示例返回值
箭头函数查询可以通过 JSON 对象中的路径表达式定位的元素。SELECT parse_json('{"a": {"b": 1}}') -> '$.a.b';1
cast在 JSON 数据类型和 SQL 数据类型之间转换数据。SELECT CAST(1 AS JSON);1
get_json_double解析并从 JSON 字符串中的指定路径获取浮点值。SELECT get_json_double('{"k1":1.3, "k2":"2"}', "$.k1");1.3
get_json_int解析并从 JSON 字符串中的指定路径获取整数值。SELECT get_json_int('{"k1":1, "k2":"2"}', "$.k1");1
get_json_string解析并从 JSON 字符串中的指定路径获取字符串。SELECT get_json_string('{"k1":"v1", "k2":"v2"}', "$.k1");v1
json_query查询可以通过 JSON 对象中的路径表达式定位的元素的值。SELECT JSON_QUERY('{"a": 1}', '$.a');1
json_each将 JSON 对象的顶层元素展开为键值对。SELECT * FROM tj_test, LATERAL JSON_EACH(j);!json_each
json_exists检查 JSON 对象是否包含可以通过路径表达式定位的元素。 如果元素存在,此函数返回 1。 如果元素不存在,该函数返回 0。SELECT JSON_EXISTS('{"a": 1}', '$.a');1
json_keys从 JSON 对象返回顶层键作为 JSON 数组,或者,如果指定了路径,则从该路径返回顶层键。SELECT JSON_KEYS('{"a": 1, "b": 2, "c": 3}');["a", "b", "c"]
json_length返回 JSON 文档的长度。SELECT json_length('{"Name": "Alice"}');1
json_string将 JSON 对象转换为 JSON 字符串SELECT json_string(parse_json('{"Name": "Alice"}'));{"Name": "Alice"}

JSON 运算符

StarRocks 支持以下 JSON 比较运算符:<<=>>==!=。 您可以使用这些运算符来查询 JSON 数据。 但是,它不允许您使用 IN 来查询 JSON 数据。 有关 JSON 运算符的更多信息,请参阅 JSON 运算符

JSON 路径表达式

您可以使用 JSON 路径表达式来查询 JSON 对象中的元素。 JSON 路径表达式的数据类型为 STRING。 在大多数情况下,它们与各种 JSON 函数一起使用,例如 JSON_QUERY。 在 StarRocks 中,JSON 路径表达式并不完全符合 SQL/JSON 路径规范。 有关 StarRocks 中支持的 JSON 路径语法的信息,请参见下表,其中使用以下 JSON 对象作为示例。

{
"people": [{
"name": "Daniel",
"surname": "Smith"
}, {
"name": "Lily",
"surname": "Smith",
"active": true
}]
}
JSON 路径符号描述JSON 路径示例返回值
$表示根 JSON 对象。'$'{ "people": [ { "name": "Daniel", "surname": "Smith" }, { "name": "Lily", "surname": Smith, "active": true } ] }
.表示子 JSON 对象。' $.people'[ { "name": "Daniel", "surname": "Smith" }, { "name": "Lily", "surname": Smith, "active": true } ]
[]表示一个或多个数组索引。 [n] 表示数组中的第 n 个元素。 索引从 0 开始。
StarRocks 2.5 支持查询多维数组,例如 ["Lucy", "Daniel"], ["James", "Smith"]。 要查询“Lucy”元素,可以使用 $.people[0][0]
'$.people [0]'{ "name": "Daniel", "surname": "Smith" }
[*]表示数组中的所有元素。'$.people[*].name'["Daniel", "Lily"]
[start: end]表示来自数组的元素子集。 子集由 [start, end] 间隔指定,该间隔排除由结束索引表示的元素。'$.people[0: 1].name'["Daniel"]