Sql JSON对象为空,但不知何故其子对象不是空的?

Sql JSON对象为空,但不知何故其子对象不是空的?,sql,null,presto,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]') i

我被以下明显的矛盾弄糊涂了:

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\u数组
NULL
,但当进一步挖掘时,它突然返回为非NULL?

这是因为您使用了
json\u extract\u scalar
而不是
json\u extract
<如果json路径的目标不是标量,则code>json\u extract\u scalar返回标量(不是类似于数组或对象的复合对象)或NULL

比较这些表达式。区别在于一个使用的是
json\u extract\u scalar
,另一个使用的是
json\u 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)

这是因为您使用了
json\u extract\u scalar
而不是
json\u extract
<如果json路径的目标不是标量,则code>json\u extract\u scalar返回标量(不是类似于数组或对象的复合对象)或NULL

比较这些表达式。区别在于一个使用的是
json\u extract\u scalar
,另一个使用的是
json\u 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)

谢谢,我已经习惯于只使用
json\u extract\u scalar
,我忘记了
json\u extract
谢谢,我已经习惯于只使用
json\u extract\u scalar
,我忘记了
json\u extract