从 Athena/Presto 中的 JSON 中提取对象值



>我有一列包含JSON对象。我需要从这个对象中提取所有值。问题是键不是固定的并且包含一些 id,所以我无法按确切的键值提取值。下面是一个示例:

{
"1220202132188388": {
"id": "1220202132188388",
"date": "2019-04-03"
},
"482928839992": {
"id": "482928839992",
"date": "2019-04-06"
}
}

所以我想得到一个数组:

[
{
"id": "1220202132188388",
"date": "2019-04-03"
},
{
"id": "482928839992",
"date": "2019-04-06"
}
]

Presto对JSONPath的支持有限,$.*不起作用。有什么解决方法吗?

您可以将 json 转换为映射并使用map_values函数。

select
map_values(cast(json_parse(c1) as map<varchar, json>)) 
from 
(
values '{
"1220202132188388": {
"id": "1220202132188388",
"date": "2019-04-03"
},
"482928839992": {
"id": "482928839992",
"date": "2019-04-06"
}
}'
) t(c1)
[{"id":"1220202132188388","date":"2019-04-03"}, {"id":"482928839992","date":"2019-04-06"}]

相关内容

  • 没有找到相关文章

最新更新