【presto】json函数

转换为JSON
支持由BOOLEAN, TINYINT, SMALLINT, INTEGER, BIGINT, REAL, DOUBLE或VARCHAR转换。
当ARRAY中的元素是以上类型时支持转换。
当map的key的类型是VARCHAR,value类型是以上类型时支持转换。

SELECT CAST(NULL AS JSON); -- NULL
SELECT CAST(1 AS JSON); -- JSON '1'
SELECT CAST(9223372036854775807 AS JSON); -- JSON '9223372036854775807'
SELECT CAST('abc' AS JSON); -- JSON '"abc"'
SELECT CAST(true AS JSON); -- JSON 'true'
SELECT CAST(1.234 AS JSON); -- JSON '1.234'
SELECT CAST(ARRAY[1, 23, 456] AS JSON); -- JSON '[1,23,456]'
SELECT CAST(ARRAY[1, NULL, 456] AS JSON); -- JSON '[1,null,456]'
SELECT CAST(ARRAY[ARRAY[1, 23], ARRAY[456]] AS JSON); -- JSON '[[1,23],[456]]'
SELECT CAST(MAP(ARRAY['k1', 'k2', 'k3'], ARRAY[1, 23, 456]) AS JSON); -- JSON '{"k1":1,"k2":23,"k3":456}'

请注意,从NULL转换为JSON并不是直接转换的。 从独立的NULL转换将产生一个SQL NULL而不是JSON’null’。 但是,当从数组或包含NULL的映射转换时,生成的JSON将具有null。

从JSON转换为其他格式
支持转换为BOOLEAN, TINYINT, SMALLINT, INTEGER, BIGINT, REAL, DOUBLE或VARCHAR。
当ARRAY中的元素是以上类型时支持转换。
当map的key的类型是VARCHAR,value类型是以上类型时支持转换。

SELECT CAST(JSON 'null' AS VARCHAR); -- NULL
SELECT CAST(JSON '1' AS INTEGER); -- 1
SELECT CAST(JSON '9223372036854775807' AS BIGINT); -- 9223372036854775807
SELECT CAST(JSON '"abc"' AS VARCHAR); -- abc
SELECT CAST(JSON 'true' AS BOOLEAN); -- true
SELECT CAST(JSON '1.234' AS DOUBLE); -- 1.234
SELECT CAST(JSON '[1,23,456]' AS ARRAY(INTEGER)); -- [1, 23, 456]
SELECT CAST(JSON '[1,null,456]' AS ARRAY(INTEGER)); -- [1, NULL, 456]
SELECT CAST(JSON '[[1,23],[456]]' AS ARRAY(ARRAY(INTEGER))); -- [[1, 23], [456]]
SELECT CAST(JSON '{"k1":1,"k2":23,"k3":456}' AS MAP(VARCHAR, INTEGER)); -- {k1=1, k2=23, k3=456}

JSON数组可以具有混合元素类型,JSON映射可以具有混合值类型。 这使得在某些情况下无法将其转换为SQL数组和映射。 为了解决这个问题,Presto支持部分转换数组和映射:

SELECT CAST(JSON '[[1, 23], 456]' AS ARRAY(JSON)); -- [JSON '[1,23]', JSON '456']
SELECT CAST(JSON '{"k1": [1, 23], "k2": 456}' AS MAP(VARCHAR, JSON)); -- {k1 = JSON '[1,23]', k2 = JSON '456'}
SELECT CAST(JSON '[null]' AS ARRAY(JSON)); -- [JSON 'null']

JSON函数

json_array_contains(json, value) → boolean
确定json中是否存在值(包含JSON数组的字符串)

SELECT json_array_contains('[1, 2, 3]', 2);

json_array_get(json_array, index) → varchar
将指定index处的元素返回到json数组中,index从0开始计数

SELECT json_array_get('["a", "b", "c"]', 0); -- 'a'
SELECT json_array_get('["a", "b", "c"]', 1); -- 'b'

此函数还支持通过负的index从数组末尾读取元素索引

SELECT json_array_get('["c", "b", "a"]', -1); -- 'a'
SELECT json_array_get('["c", "b", "a"]', -2); -- 'b'

如果指定索引处的元素不存在,则函数返回null:

SELECT json_array_get('[]', 0); -- null
SELECT json_array_get('["a", "b", "c"]', 10); -- null
SELECT json_array_get('["c", "b", "a"]', -10); -- null

json_array_length(json) → bigint
返回json的数组长度(包含JSON数组的字符串)

SELECT json_array_length('[1, 2, 3]');

json_extract(json, json_path) → json
评估json上的JSONPath表达式json_path(包含JSON的字符串),并将结果作为JSON字符串返回:

SELECT json_extract(json, '$.store.book');

json_extract_scalar(json, json_path) → varchar
和json_extract()类似,但返回结果值作为一个字符串(而不是编码为JSON)。 json_path引用的值必须是scalar(boolean, number or string):

SELECT json_extract_scalar('[1, 2, 3]', '$[2]');
SELECT json_extract_scalar(json, '$.store.book[0].author');

json_format(json) → varchar
将json作为字符串返回

SELECT json_format(JSON '[1, 2, 3]'); -- '[1,2,3]'
SELECT json_format(JSON '"a"'); -- '"a"'

json_parse(string) → json
解析字符串作为json

SELECT json_parse('[1, 2, 3]'); -- JSON '[1,2,3]'
SELECT json_parse('"a"'); -- JSON '"a"'

json_size(json, json_path) → bigint
跟json_extract()一样,但返回size的大小。对于对象或数组,大小是成员数,scalar 的大小为零:

SELECT json_size('{"x": {"a": 1, "b": 2}}', '$.x'); -- 2
SELECT json_size('{"x": [1, 2, 3]}', '$.x'); -- 3
SELECT json_size('{"x": {"a": 1, "b": 2}}', '$.x.a'); -- 0
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JSON函数包括:JSON_VALUE, JSON_QUERY, JSON_TABLE, JSON_ARRAY, JSON_OBJECT, OPENJSON, ISJSON, FORMATJSON, JSON_MODIFY。 ### 回答2: Presto是一个分布式 SQL 查询引擎,它提供了一系列的函数来处理 JSON 数据。以下是一些常用的Presto JSON函数: 1. json_parse(json_str):将输入的 JSON 字符串解析为 Presto 内部的 JSON 数据类型。例如,json_parse('{"name":"Tom", "age":30}') 返回一个 JSON 对象类型。 2. json_extract(json, json_path):从输入的 JSON 对象中提取指定的字段值。json_path 是一个字符串,用于指定要提取的字段路径。例如,json_extract('{"name":"Tom", "age":30}', '$.name') 返回值 "Tom"。 3. json_array_length(json_array):返回指定 JSON 数组的长度。例如,json_array_length('[1,2,3]') 返回值 3。 4. json_array_contains(json, value):检查指定值是否存在于 JSON 数组中。如果存在返回 true,否则返回 false。例如,json_array_contains('[1,2,3]', 2) 返回值 true。 5. json_extract_scalar(json, json_path):从 JSON 对象中提取指定字段的标量值(非 JSON 类型)。例如,json_extract_scalar('{"name":"Tom", "age":30}', '$.age') 返回值 30。 6. json_array_elements(json):将 JSON 数组拆分为每个元素,并将其作为行返回。例如,json_array_elements('[1,2,3]') 返回三行,每行一个元素。 这些只是Presto中的一部分 JSON 函数,还有其他更多的函数,用于处理和操作 JSON 数据。这些函数使得在 Presto 中处理和查询 JSON 数据变得更加方便和灵活。 ### 回答3: Presto是一个开源的分布式SQL查询引擎,支持各种数据源和数据格式。在Presto中,有一些内置的JSON函数,可以用于处理和操作JSON格式的数据。 1. `json_array_contains(json, value)`:判断指定的JSON数组中是否包含给定的值。返回一个布尔值。 2. `json_array_length(json)`:返回指定的JSON数组的长度。 3. `json_extract(json, json_path)`:从给定的JSON中提取出特定的值,根据提供的JSON路径。返回一个JSON。 4. `json_extract_scalar(json, json_path)`:从给定的JSON中提取出特定的标量值,根据提供的JSON路径。 5. `json_size(json)`:返回给定的JSON对象或数组的大小。 6. `json_unquote(json)`:去除给定的JSON字符串的引号,返回一个解析后的JSON字符串。 7. `json_object(json_key1, json_value1, ...)`:根据提供的键值对,创建一个JSON对象。 8. `json_parse(json)`:将给定的JSON字符串解析为JSON对象。 9. `json_format(json, indent)`:将给定的JSON对象格式化为带缩进的字符串,可以指定缩进的大小。 10. `json_array_elements(json)`:将给定的JSON数组展开为一系列独立的JSON元素。 以上是Presto中一些常用的JSON函数,可以通过官方文档或者其他资源来了解更多的JSON函数和其用法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值