JSON/JSONB函数和操作符
JSON/JSONB数据类型参考JSON/JSONB类型,操作符如表1 JSON/JSONB通用操作符和表2 JSONB额外支持操作符所示。
操作符 | 左操作数类型 | 右操作数类型 | 返回类型 | 描述 | 示例 |
|---|---|---|---|---|---|
-> | Array-json(b) | int | json(b) | 获得array-json元素。下标不存在返回空。 | SELECT '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json->2;
?column?
-------------
{"c":"baz"}
(1 row) |
-> | object-json(b) | text | json(b) | 通过键获得值。不存在则返回空。 | SELECT '{"a": {"b":"foo"}}'::json->'a';
?column?
-------------
{"b":"foo"}
(1 row) |
->> | Array-json(b) | int | text | 获得JSON 数组元素。下标不存在返回空。 | SELECT '[1,2,3]'::json->>2; ?column? ---------- 3 (1 row) |
->> | object-json(b) | text | text | 通过键获得值。不存在则返回空。 | SELECT '{"a":1,"b":2}'::json->>'b';
?column?
----------
2
(1 row) |
#> | container-json (b) | text[] | json(b) | 获取在指定路径的JSON 对象,路径不存在则返回空。 | SELECT '{"a": {"b":{"c": "foo"}}}'::json #>'{a,b}';
?column?
--------------
{"c": "foo"}
(1 row) |
#>> | container-json (b) | text[] | text | 获取在指定路径的JSON 对象,路径不存在则返回空。 | SELECT '{"a":[1,2,3],"b":[4,5,6]}'::json #>>'{a,2}';
?column?
----------
3
(1 row) |

对于 #> 和 #>> 操作符,当给出的路径无法查找到数据时,不会报错,会返回空。
操作符 | 右操作数类型 | 描述 | 例子 |
|---|---|---|---|
@> | jsonb | 左边的JSON的顶层是否包含右边JSON的顶层所有项。 | '{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb |
<@ | jsonb | 左边的JSON的所有项是否全部存在于右边JSON的顶层。 | '{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb |
? | text | 键/元素的字符串是否存在于JSON 值的顶层。 | '{"a":1, "b":2}'::jsonb ? 'b' |
?| | text[] | 这些数组字符串中的任何一个是否作为顶层键存在。 | '{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'c'] |
?& | text[] | 是否所有这些数组字符串都作为顶层键存在。 | '["a", "b"]'::jsonb ?& array['a', 'b'] |
= | jsonb | 判断两个jsonb的大小关系,同函数jsonb_eq。 | / |
<> | jsonb | 判断两个jsonb的大小关系,同函数jsonb_ne。 | / |
< | jsonb | 判断两个jsonb的大小关系,同函数jsonb_lt。 | / |
> | jsonb | 判断两个jsonb的大小关系,同函数jsonb_gt。 | / |
<= | jsonb | 判断两个jsonb的大小关系,同函数jsonb_le。 | / |
>= | jsonb | 判断两个jsonb的大小关系,同函数jsonb_ge。 | / |

