在不知道密钥的情况下提取JSON数据

问题描述 投票:0回答:1

我很头疼试图弄清楚如何在 Athena 中读取具有以下格式的 JSON

{
  "id": "1",
  "key1": {
    "dynamic_key_here": [
      {"id": "A", "key2": "content I want"}
    ]
  }
}

我们将此列称为“数据”,该表来自“信息”

使用

SELECT json_extract(data, '$.key1') FROM info
我可以到达第二层并将其作为 json 检索,但在这里我陷入困境,因为第二层的密钥是动态的,我事先不知道。 我所需要的只是第二层中 key2 中包含的字符串的内容(它与表中 json 之外的内容是 1:1 关系,基本上就像在我的表中添加一列,不需要取消嵌套)任何人都可以帮忙吗?

sql json amazon-athena presto trino
1个回答
0
投票

有多种方法可以实现这一目标。

例如,通过使用将

JSON
转换为
MAP
的功能:

-- sample data
WITH dataset(data) as (
    values ('{
          "id": "1",
          "key1": {
            "dynamic_key_here": [
              {"id": "A", "key2": "content I want"}
            ]
          }
        }')
)

-- query
select json_extract(content, '$.key2') result
from dataset
, unnest(map_values(cast(json_extract(data, '$.key1') as map(varchar, array(json))))) as t(inner_arr)
, unnest(inner_arr) as tt(content);

输出:

      result
------------------
 "content I want"

另一种方法是使用

json-query
:

-- query
select json_query(data, 'lax $.key1.*.key2' WITH  ARRAY WRAPPER) result
from dataset;

输出:

       result
--------------------
 ["content I want"]
© www.soinside.com 2019 - 2024. All rights reserved.