Hi,
I?m experimenting with the json1 extension, and I?d like to confirm the proper
way to detect if a key exists in the json, vs its value being null. For example:
? sqlite> select json_extract('{"a":2,"c":[4,5,{"f":7}]}', '$.x');
? sqlite> select json_extract('{"a":2,"c":[4,5,{"f":7}]}', '$.x') IS NULL;
? 1
? sqlite> select json_extract('{"x":null, "a":2,"c":[4,5,{"f":7}]}', '$.x');
? sqlite> select json_extract('{"x":null, "a":2,"c":[4,5,{"f":7}]}', '$.x') IS
NULL;
? 1
So far it looks as if the way to distinguish between a json key existing with a
value of null vs. not existing is to use `json_type`
? sqlite> select json_type('{"a":2,"c":[4,5,{"f":7}]}', '$.x') IS NULL;
? 1
? sqlite> select json_type('{"x": null, "a":2,"c":[4,5,{"f":7}]}', '$.x');
? null
Is this correct?
Also are there optimizations in place so that a column that is a json string is
only
parsed once if it is involved in json1 functions? For example:
? sqlite> create table t1(doc);
? sqlite> insert into t1(doc) values(json('{"x": null,
"a":2,"c":[4,5,{"f":7}]}'));
? sqlite> select json_type(doc,'$.a') IS NOT NULL, json_extract(doc, '$.a')
from t1;
? 1|2
In this case, is doc parsed twice? I'm not actually worried about
performance, just wondering.
enjoy,
-jeremy
--?
Jeremy Hinegarnder
Copious Free Time, LLC