我使用Presto(0.163)查询数据并试图从json中提取字段。
我有一个像下面给出的json,它出现在列' style_attributes':
"attributes": {
"Brand Fit Name": "Regular Fit",
"Fabric": "Cotton",
"Fit": "Regular",
"Neck or Collar": "Round Neck",
"Occasion": "Casual",
"Pattern": "Striped",
"Sleeve Length": "Short Sleeves",
"Tshirt Type": "T-shirt"
}
我无法提取字段'短袖'。 以下是我使用的查询:
从表中选择JSON_EXTRACT(style_attributes,' $。attributes.Sleeve Length')作为长度;
查询失败,出现以下错误 - 无效的JSON路径:' $。attributes.Sleeve Length'
对于没有'的字段'(空格),查询运行正常。
我试图在Presto文档中找到解决方案,但没有成功。
答案 0 :(得分:6)
presto:default> select json_extract_scalar('{"attributes":{"Sleeve Length": "Short Sleeves"}}','$.attributes["Sleeve Length"]');
_col0
---------------
Short Sleeves
或
presto:default> select json_extract_scalar('{"attributes":{"Sleeve Length": "Short Sleeves"}}','$["attributes"]["Sleeve Length"]');
_col0
---------------
Short Sleeves
JSON功能更改
:func:
json_extract
和:func:json_extract_scalar
现在正在运行 支持方括号语法:SELECT json_extract(json, '$.store[book]'); SELECT json_extract(json,'$.store["book name"]');
作为此更改的一部分,字符集 允许在非括号内的路径段被限制为 字母数字,下划线和冒号。此外,冒号不能 用于未引用的括号中的路径段。使用新的括号语法 用引号来匹配包含特殊字符的元素。
答案 1 :(得分:0)
这是你的正确答案。 我们说:
JSON:{"旅行日期":" 2017-9-22","城市":"西雅图"} > 专栏名称:ITINERARY 我还提取了旅行日期'然后形成当前的JSON:
查询:从表中选择JSON_EXTRACT(行程," $。\"旅行日期\"")
注意:只需在密钥名称的开头和结尾添加 \" 。
希望这肯定能满足您的需求。的:)强>
答案 2 :(得分:0)
SELECT
tags -- It is column with Json string data
,json_extract(tags , '$.Brand') AS Brand
,json_extract(tags , '$.Portfolio') AS Portfolio
,cost
FROM
TableName
Sample data for tags - {"Name": "pxyblob", "Owner": "", "Env": "prod", "Service": "", "Product": "", "Portfolio": "OPSXYZ", "Brand": "Limo", "AssetProtectionLevel": "", "ComponentInfo": ""}