5

我的 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 路径:”

4

1 回答 1

11

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

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

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

这里有一些事实可以帮助您理解为什么您尝试的替代方案不起作用:

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