首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询以数组开头的json

查询以数组开头的json
EN

Stack Overflow用户
提问于 2021-03-27 06:43:17
回答 2查看 46关注 0票数 0

我有一个以数组开头的JSON,但我无法查询它。JSON的格式如下:

代码语言:javascript
复制
[
{"@id":1,
"field1":"qwerty",
"@field2":{"name":"my_name", "name2":"my_name_2"},
"field3":{"event":[{"event_type":"OP",...}]}
},
{"@id":2..
}
]

对如何查询有什么建议吗?

如果我尝试使用横向展平,我不知道该使用什么键:

代码语言:javascript
复制
select 
'???'.Value:@id::string as id
from tabl1
,lateral flatten (tabl1_GB_RECORD:???) as gb_record
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-27 07:18:20

您的SQL已关闭但不完整,下面将为您提供@id值。

代码语言:javascript
复制
with tbl1 (v) as (
 select parse_json('  
 [
 {"@id":1,
 "field1":"qwerty",
 "@field2":{"name":"my_name", "name2":"my_name_2"},
 "field3":{"event":[{"event_type":"OP"}]}
 },
 {"@id":2
 }
 ]')
)  
select t.value:"@id" id from tbl1
, lateral flatten (input => v)  as t

结果:

代码语言:javascript
复制
id
___
1
2

如果您有任何其他问题,请告诉我

票数 1
EN

Stack Overflow用户

发布于 2021-03-27 07:19:36

当json以数组开始时,您可以利用要展平的字段。大致是这样的:

代码语言:javascript
复制
WITH x AS (
SELECT parse_json('[
{"@id":1,
"field1":"qwerty",
"@field2":{"name":"my_name", "name2":"my_name_2"},
"field3":{"event":[{"event_type":"OP"}]}
},
{"@id":2,
"field1":"qwerty",
"@field2":{"name":"my_name", "name2":"my_name_2"},
"field3":{"event":[{"event_type":"OP"}]}
}
]') as json_data
)
SELECT y.value,
       y.value:"@id"::number as id,
       y.value:field1::string as field1,
       y.value:"@field2"::variant as field2,
       y.value:field3::variant as field3,
       y.value:"@field2":name::varchar as name
FROM x,
LATERAL FLATTEN (input=>json_data) y;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66825181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档