跳到主要内容
翻译页面

本页面由 AI 辅助从英文翻译而来。如两者存在差异,以英文版本为准。

JSON_EXTRACT

从格式正确的 JSON 对象或数组中返回一个或多个值。

另请参阅:
[SELECT] [DESCRIBE] [JSON_ARRAY_LENGTH] [ 数据类型 ]


提示

使用 DESCRIBE 函数查找可用于 StackQL JSON 函数的 array 或 object 数据类型。使用 JSON_TYPE 函数解析嵌套对象或数组元素的数据类型。

备注

如果你将 stackql 与 postgres SQL 后端一起使用,json_extract 函数将实现为 json_extract_path_text 函数

语法​

SELECT JSON_EXTRACT(json_array_or_object, json_path[, json_path1, .. json_pathN])
FROM <multipartIdentifier>;

参数​

json_array_or_object
JSON 数组或对象。

json_path
指向 json_array_or_object 内所含数组或对象的 JSON 路径。请参阅 jsonpath.com。

如果只提供一个 json_path,则返回一个标量结果,其数据类型与解析出的路径相对应。

如果提供多个 json_path 参数,则结果是一个数组,由各个路径解析出的对象组成。

将 json_path 参数指定为 '$' 时,将返回 json_array_or_object 参数所表示的列对应的整个 JSON 对象。

返回值​

字符串、整数、对象、数组、布尔值或 null,取决于作为输入提供的 json_array_or_object 和 json_path。


示例​

返回与每个 Google Compute Engine 实例关联的磁盘对象​

SELECT name, json_extract(disks, '$') as disks
FROM google.compute.instances
WHERE project = 'stackql-demo'
AND zone = 'australia-southeast1-a';

返回附加到每个 Google Compute Engine 实例的第一个磁盘的设备名称和大小​

SELECT name, json_extract(disks, '$[0].deviceName') as device_name,
json_extract(disks, '$[0].diskSizeGb') as disk_size
FROM google.compute.instances
WHERE project = 'stackql-demo'
AND zone = 'australia-southeast1-a';

返回附加到每个 Google Compute Engine 实例的第一个 NIC 的网络层级​

SELECT name, json_extract(networkInterfaces, '$[0].accessConfigs[0].networkTier') as network_tier
FROM google.compute.instances
WHERE project = 'stackql-demo'
AND zone = 'australia-southeast1-a';

返回与每个 Google Compute Engine 实例关联的第一个服务账号所关联的作用域列表​

SELECT name, json_extract(serviceAccounts, '$[0].scopes') as scopes
FROM google.compute.instances
WHERE project = 'stackql-demo'
AND zone = 'australia-southeast1-a';
/* returns a list for each service account */

有关更多信息,请参阅 https://www.sqlite.org/json1.html#jex