1

我有一个包含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 的支持有限,$.*无法正常工作。有什么解决方法吗?

4

1 回答 1

4

您可以将 json 转换为 map 并使用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"}]
于 2020-01-31T06:18:39.763 回答