如何使用"〜"访问json字段在具有Presto JSON功能的字段名称中

时间:2014-12-18 17:06:16

标签: json presto

我的json字段中有一个“〜”,例如“~id”。使用Presto 0.75,我无法访问这些字段。以下是我迄今为止没有成功的尝试:

SELECT json_extract_scalar('{“id”:“1”,“table”:“test”}','$ .table'); //这有效吗

SELECT json_extract_scalar('{“id”:“1”,“〜table”:“test”}','$。[\“~table \”]'); //不起作用

SELECT json_extract_scalar('{“id”:“1”,“〜table”:“test”}','$。[\〜table]'); //不起作用

给出的错误是“无效的JSON路径:”

1 个答案:

答案 0 :(得分:7)

该JSON路径的正确格式为:'$["~table"]'

presto> SELECT json_extract_scalar('{"id":"1","~table":"test"}', '$["~table"]');

 _col0 
-------
 test  
(1 row)

以下是一些可以帮助您了解为什么您尝试过的替代方案不起作用的事实:

  • JSON路径表达式用SQL字符串表示。需要转义的唯一字符是字符串分隔符(即单引号),而您执行此操作的方式是使用另一个单引号。例如:'don''t'don't的SQL字符串文字。 SQL字符串文字中的双引号不需要转义。
  • JSON路径表达式支持两种访问属性的形式:字段与数组元素访问。如果您有一个名为" foo"的属性,则可以使用'$["foo"]''$.foo'访问该属性。字段访问语法仅适用于有效标识符(字母数字和下划线)的名称。