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