跳到主要内容

注意事项

相等比较

警告:当前 JSON 的相等比较会因上下文不同而存在差异。有些场景基于原始文本比较,另一些场景则基于逻辑内容比较。

下面查询中所有字段都返回 true:

SELECT
a != b, -- 空格是 JSON 物理内容的一部分。尽管逻辑内容相等,值仍被视为不相等。
c != d, -- 同上。
c[0] = d[0], -- 这里相等,因为字段物理内容中的空格被移除了:
a = c[0], -- 的确,该字段等于“无空格”的空列表……
b != c[0], -- ……但与“有空格”的空列表不相等。
FROM (
SELECT
'[]'::JSON AS a,
'[ ]'::JSON AS b,
'[[]]'::JSON AS c,
'[[ ]]'::JSON AS d
);
(a != b)(c != d)(c[0] = d[0])(a = c[0])(b != c[0])
truetruetruetruetrue