JSON-объект имеет значение null, но как-то его дочерние элементы - нет? - PullRequest
0 голосов
/ 29 октября 2018

Я немного смущен следующим очевидным противоречием:

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_array равно NULL, но внезапно, когда копать дальше, оно возвращается как ненулевое?

1 Ответ

0 голосов
/ 29 октября 2018

Это потому, что вы использовали json_extract_scalar вместо json_extract. json_extract_scalar возвращает скаляр (не составной, как массив или объект) или NULL, если целью пути json не является скаляр.

Сравните эти выражения. Разница в том, что один использует 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...