簡體   English   中英

從 Presto 中的 JSON 數組中提取值

[英]Extract values from a JSON Array in Presto

我有一列 JSON arrays 如下所示:

{data=[{"name":"col1","min":0,"max":32,"avg":29},
{"name":"col2","min":1,"max":35,"avg":21},
{"name":"col3","min":4,"max":56,"avg":34}]}

我正在嘗試解析數組並根據條件提取特定值。 例如

"min"的值,其中"name"="col1" :0

"avg"的值,其中"name"="col3" :34

有沒有人有解決方案?

您的 JSON 無效。 它應該是{"data":[不是{data = [

如果 JSON 有效(您可以在子查詢中輕松修復它),提取數據,將其轉換為數組(行)並使用 CASE 條件語句獲取值。 我在此處添加了 max() 聚合以刪除 NULL 記錄並在單行中獲取所有必需的值,您可以使用 filter 代替(例如where x.name = 'col1' ),具體取決於您的需要:

with mydata as (
select '{"data":[{"name":"col1","min":0,"max":32,"avg":29},
{"name":"col2","min":1,"max":35,"avg":21},
{"name":"col3","min":4,"max":56,"avg":34}]}' json
)

select max(case when x.name = 'col1' then x.min end) min_col1,
       max(case when x.name = 'col3' then x.avg end) avg_col3
from mydata
CROSS JOIN
    UNNEST(
            CAST(
                JSON_EXTRACT(json,'$.data')
                    as ARRAY(ROW(name VARCHAR, min INTEGER, max INTEGER, avg INTEGER))
                 )
          ) as x(name, min, max, avg) --column aliases

結果:

min_col1    avg_col3
0           34

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM