首页 > 解决方案 > 如何在 Snowflake 中的嵌套 JSON 中获取值(基于相同 JSON 中存在的值)

问题描述

我有一个 JSON 对象,如下所示:

{"K":"5",
"DE":[
{"H[1]":"1-162001524"},
{"H[2]":"2-162001534"},
{"H[3]":"3-162001540"},
{"H[4]":"5-162001559"},
{"H[5]":"6-162001563"}
]
}

现在,我想要根据我的选择查询中 K 中的值从 DE 数组中获取数据。所以,从上面的例子中,它应该给我 H[5] 的值,即 6-162001563。我尝试了一些不同的东西,但没有运气。

有人可以帮我解决这个问题吗?

免责声明:我不是 JSON 专家。

标签: arraysjsonsnowflake-cloud-data-platformflatten

解决方案


这不是最有说服力的,但它确实有效。假设我使用以下语句创建了一个 CTE,以类似于您的 JSON 数据:

WITH x as (
    SELECT parse_json('{"K":"5",
          "DE":[
          {"H[1]":"1-162001524"},
          {"H[2]":"2-162001534"},
          {"H[3]":"3-162001540"},
          {"H[4]":"5-162001559"},
          {"H[5]":"6-162001563"}
          ]
          }') as var
  )

get_path()然后,您可以展平数组,根据必须将 K 值和额外字符一起解析以生成路径的语句搜索值。这为您提供了数组中的所有记录,但随后搜索非 NULL 记录,您将获得所需的输出。

SELECT get_path(y.value,'"H['||x.var:K::varchar||']"')::varchar as output
FROM x,
LATERAL FLATTEN(input=>var:DE) y
WHERE output IS NOT NULL;

推荐阅读