json() seems to convert valid JSON5 into invalid JSON.
(1) By anonymous on 2023-11-08 22:09:03 [source]
SELECT json('''Valid JSON5 string'''); --good
=> "Valid JSON5 string" --good canonical JSON
SELECT json('''Valid "JSON5" string'''); --good
=> "Valid "JSON5" string" --not good not valid JSON/5
SELECT json('"Valid "JSON5" string"'); --bad output from above
=> NULL --I do not understand this, shouldn't it error?
SELECT json_valid('"Valid "JSON5" string"'); --bad output from above
=> 0 --correct, it's not canonical JSON
SELECT json_error_position('"Valid "JSON5" string"'); --bad output from above
=> 1 --correct, error found
However, if I pass the bad output direly into json functions, it just runs with it.
SELECT json_error_position(bad_output)
FROM (
SELECT json('''Valid "JSON5" string''') AS bad_output
);
=> 0
Examples with json_extract:
SELECT json_extract('{"string":"something \"goes\" here"}', '$.string');
=> something "goes" here
--expected this is a string NOT JSON
SELECT json_extract('{"string":"something \"goes\" here"}', '$');
=> {"string":"something \"goes\" here"}
--expected this is JSON with correctly escaped quotes
SELECT json_extract('{"string":''something "goes" here''}', '$.string');
=> something "goes" here
--expected the input is JSON5 but output still just a string not JSON
SELECT json_extract('{"string":''something "goes" here''}', '$');
=> {"string":"something "goes" here"}
-- This should be canonical JSON but it's not valid JSON
Tested with sqlite3.exe from https://www.sqlite.org/2023/sqlite-tools-win-x64-3440000.zip
(2) By Richard Hipp (drh) on 2023-11-09 02:01:07 in reply to 1 [link] [source]
Thanks for the bug report.
Please verify that the problem has been fixed on the latest check-ins. You can either do your own build from sources or visit https://sqlite.org/fiddle and try out the WASM build I put there.