JSON对象为null,但是不知道其子对象不是?

时间:2018-10-29 03:25:30

标签: sql null presto

我对以下明显的矛盾感到困惑:

select json_extract_scalar('{"json_array":[{"array_field":"1"}]}', 
                           '$.json_array') is null,
       json_extract_scalar('{"json_array":[{"array_field":"1"}]}', 
                           '$.json_array[0]') is null,
       json_extract_scalar('{"json_array":[{"array_field":"1"}]}', 
                           '$.json_array[0].array_field') is null

结果:

true  true false

json_arrayNULL怎么可能,但是突然进一步挖掘时,它突然返回非空值?

1 个答案:

答案 0 :(得分:2)

这是因为您使用了json_extract_scalar而不是json_extract。如果json路径的目标不是标量,则json_extract_scalar返回标量(不是像数组或对象这样的复合标量)或NULL。

比较这些表达式。区别在于,一个正在使用json_extract_scalar,另一个正在使用json_extract

presto> select json_extract_scalar('{"json_array":[{"array_field":"1"}]}', '$.json_array'),
     -> json_extract('{"json_array":[{"array_field":"1"}]}', '$.json_array');
 _col0 |         _col1
-------+-----------------------
 NULL  | [{"array_field":"1"}]
(1 row)