如何在 Snowflake 中获取嵌套 JSON 内的值(基于同一 JSON 内存在的值)

How to fetch value inside a Nested JSON in Snowflake (based on value present inside the same 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"}
]
}

现在,我需要基于 select 查询中 K 中的值的 DE 数组中的数据。所以,从上面的例子来看,它应该给我 H[5] 的值,即 6-162001563。 我尝试了几种不同的方法,但没有成功。

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

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

这不是最有效的 eloquent,但它确实有效。假设我使用以下语句创建一个 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;