注意事项
相等比较
警告:当前 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]) |
|---|---|---|---|---|
| true | true | true | true | true |