JSON对象为null,但不知何故它的子对象不是



以下明显的矛盾让我有点困惑:

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,但当进一步挖掘时,它突然变成非空?

这是因为您使用了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)

相关内容

  • 没有找到相关文章

最新更新