Presto中JSON_EXTRACT的问题包含' '字符

时间:2017-04-07 07:14:48

标签: sql presto

我使用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文档中找到解决方案,但没有成功。

3 个答案:

答案 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"]');
     

作为此更改的一部分,字符集   允许在非括号内的路径段被限制为   字母数字,下划线和冒号。此外,冒号不能   用于未引用的括号中的路径段。使用新的括号语法   用引号来匹配包含特殊字符的元素。

     

https://github.com/prestodb/presto/blob/c73359fe2173e01140b7d5f102b286e81c1ae4a8/presto-docs/src/main/sphinx/release/release-0.75.rst

答案 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": ""}