从 JSON 中提取对象值 Athena/Presto
Extracting object values from JSON in Athena/Presto
我有一列包含 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"}]
我有一列包含 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"}]