sql - 像 Snowflake 中的 VARCHAR 列一样解析 JSON
问题描述
我有一个TAG
在 SQL 数据库中调用的 VARCHAR 列,其数据如下例所示。
示例:
{
"list":[
{
"item":{
"id":"aa1212dg3232",
"name":"Joe Doe",
"postScore":9000,
"url":”google.com"
}
},
{
"item":{
"id":"1111jjdjdjsdj11",
"name":"Jane Doe",
"postScore":12222,
"url":"yahoo.com"
}
}
]
}
由于它不是 JSON 列,因此我很难解析该列以获取 postScore 值。
我试图将其从 a 转换VARCHAR
为Variant
数据类型,以便我可以执行以下操作来获取
SELECT d.TAGS['list']['item']['postScore']::string as PostScore
FROM data d;
任何有关我如何从这个 Varchar 列中获取 postScore 值的帮助将不胜感激!
解决方案
使用 CTE 作为示例输入:
WITH x AS (
SELECT '{
"list":[
{
"item":{
"id":"aa1212dg3232",
"name":"Joe Doe",
"postScore":9000,
"url":"google.com"
}
},
{
"item":{
"id":"1111jjdjdjsdj11",
"name":"Jane Doe",
"postScore":12222,
"url":"yahoo.com"
}
}
]
}' as str
)
您只需要在将字符串解析为 JSON 后展平数组:
SELECT y.value:item:postScore::varchar
FROM x,
LATERAL FLATTEN(input=>parse_json(str):list) y;
推荐阅读
- selenium - 线程“主”org.openqa.selenium.NoAlertPresentException 中的异常:尝试使用 Selenium 和 Java 解除警报时没有此类警报
- azure - ISTIO 内部流量路由是否可以使用自定义网关?
- typescript - 这个类型声明中的 { 0: T } 是什么意思?
- python-3.x - 如何“pip安装rdpy”
- salesforce - SOQL:即使零行满足查询,有没有办法返回列标题
- angularjs - Ag-grid 中 onCellValueChanged 和 Tab 键的问题
- cuda - 图灵架构中异步引擎计数的说明
- lex - 指数的 Lex 解析
- php - Woocommerce - 更改默认值税类
- sql-server - 称为“money”的 SQL Server 数据类型是二进制定点类型还是十进制定点类型?