推荐答案
Presto 提供了丰富的 JSON 函数,用于处理和操作 JSON 数据。以下是一些常用的 JSON 函数:
json_extract(json, json_path)
从 JSON 文档中提取指定路径的值。json_extract_scalar(json, json_path)
从 JSON 文档中提取指定路径的标量值(如字符串、数字、布尔值)。json_format(json)
将 JSON 对象或数组格式化为字符串。json_parse(string)
将字符串解析为 JSON 对象或数组。json_size(json, json_path)
返回 JSON 文档中指定路径的数组或对象的元素数量。json_array_contains(json, value)
检查 JSON 数组中是否包含指定的值。json_array_get(json, index)
从 JSON 数组中获取指定索引的元素。json_array_length(json)
返回 JSON 数组的长度。json_object_keys(json)
返回 JSON 对象的所有键。json_merge(json1, json2)
合并两个 JSON 文档。
本题详细解读
json_extract(json, json_path)
- 功能:从 JSON 文档中提取指定路径的值。
- 示例:
SELECT json_extract('{"name": "John", "age": 30}', '$.name'); -- 返回: "John"
json_extract_scalar(json, json_path)
- 功能:从 JSON 文档中提取指定路径的标量值。
- 示例:
SELECT json_extract_scalar('{"name": "John", "age": 30}', '$.age'); -- 返回: 30
json_format(json)
- 功能:将 JSON 对象或数组格式化为字符串。
- 示例:
SELECT json_format(JSON '{"name": "John", "age": 30}'); -- 返回: '{"name": "John", "age": 30}'
json_parse(string)
- 功能:将字符串解析为 JSON 对象或数组。
- 示例:
SELECT json_parse('{"name": "John", "age": 30}'); -- 返回: JSON '{"name": "John", "age": 30}'
json_size(json, json_path)
- 功能:返回 JSON 文档中指定路径的数组或对象的元素数量。
- 示例:
SELECT json_size('{"name": "John", "hobbies": ["reading", "swimming"]}', '$.hobbies'); -- 返回: 2
json_array_contains(json, value)
- 功能:检查 JSON 数组中是否包含指定的值。
- 示例:
SELECT json_array_contains('["reading", "swimming"]', 'swimming'); -- 返回: true
json_array_get(json, index)
- 功能:从 JSON 数组中获取指定索引的元素。
- 示例:
SELECT json_array_get('["reading", "swimming"]', 1); -- 返回: "swimming"
json_array_length(json)
- 功能:返回 JSON 数组的长度。
- 示例:
SELECT json_array_length('["reading", "swimming"]'); -- 返回: 2
json_object_keys(json)
- 功能:返回 JSON 对象的所有键。
- 示例:
SELECT json_object_keys('{"name": "John", "age": 30}'); -- 返回: ["name", "age"]
json_merge(json1, json2)
- 功能:合并两个 JSON 文档。
- 示例:
SELECT json_merge('{"name": "John"}', '{"age": 30}'); -- 返回: '{"name": "John", "age": 30}'