Sql 将JSON数组中的每个值提取为唯一行
这是我的问题Sql 将JSON数组中的每个值提取为唯一行,sql,arrays,json,presto,Sql,Arrays,Json,Presto,这是我的问题 %jdbc(presto) select cast(json_extract(basicmetadata, '$.locales') as array<map<varchar, json>>) from escherbird.entities where entityid = 1262415487625019394 and domainid = 124 这个查询给我一个空结果 %jdbc(presto) select
%jdbc(presto)
select
cast(json_extract(basicmetadata, '$.locales') as array<map<varchar, json>>)
from
escherbird.entities
where
entityid = 1262415487625019394
and domainid = 124
这个查询给我一个空结果
%jdbc(presto)
select
cast(json_extract(basicmetadata, '$.locales.country') as array<map<varchar, json>>)
from
escherbird.entities
where
entityid = 1262415487625019394
and domainid = 124
如何编写查询以将每个国家作为唯一行返回 这是一种对象类型,若要在表中显示,应将其转换为数组 i、 e:
var Array_name = Object.keys(object_name);
然后您可以将其用作数组这是在SQL server 2016及更高版本中运行的查询
DECLARE @JSONDATA NVARCHAR(MAX);
SET
@JSONDATA = N'{"domainId":29,"locales":[{"language":"en","country":"IN"},{"language":"en","country":"AU"}]}';
SELECT
COUNTRY
FROM
OPENJSON(@JSONDATA) WITH (
LOCALES NVARCHAR(MAX) '$.locales' AS JSON
) CROSS APPLY OPENJSON(LOCALES, '$') WITH (
COUNTRY NVARCHAR(2) '$.country'
);
以下是在Oracle server中运行的查询
如果您使用的是Postgres,您可以使用:
select c.item ->> 'country' as country
from the_table t
cross join jsonb_array_elements(t.json_column -> 'locales') as c(item);
请用您正在运行的数据库标记您的问题:mysql、postgresql、oracle。。。?JSON函数高度特定于供应商。请添加用于获取此函数的sql语句。
SELECT
*
FROM
JSON_TABLE(
'{"domainId":29,"locales":[{"language":"en","country":"IN"},{"language":"en","country":"AU"}]}',
'$.locales[*]' COLUMNS (
-- L_ROWNUM FOR ORDINALITY,
L_COUNTRY VARCHAR2(10) PATH '$.country'
)
)
select c.item ->> 'country' as country
from the_table t
cross join jsonb_array_elements(t.json_column -> 'locales') as c(item);