我的json字段中有一个"~",例如"~id"。使用 Presto 0.75,我无法访问此类字段。以下是我迄今为止尝试过但没有成功的方法:
SELECT json_extract_scalar('{"id":"1","table":"test"}', '$.table'(;
SELECT json_extract_scalar('{"id":"1","~table":"test"}', '$.[\"~表\"]'(;不起作用
SELECT json_extract_scalar('{"id":"1","~table":"test"}', '$.[\~表]'(;不起作用
给出的错误是"无效的 JSON 路径:">
该 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'
访问它。字段访问语法仅适用于有效标识符(字母数字和下划线(的名称。