表 JSON/JSONB 通用操作符
操作符 |
左操作数类型 |
右操作数类型 |
返回类型 |
描述 |
例子 |
例子结果 |
-> |
Array-json(b) |
int |
json(b) |
获得array-json元素。下标不存在返回空。 |
'[{“a”:“foo”},{“b”:“bar”},{“c”:“baz”}]'::json->2 |
{“c”:“baz”} |
-> |
object-json(b) |
text |
json(b) |
通过键获得值。不存在则返回空。 |
'{“a”: {“b”:“foo”}}'::json->'a' |
{“b”:“foo”} |
->> |
Array-json(b) |
int |
text |
获得 JSON 数组元素。下标不存在返回空。 |
'[1,2,3]'::json->>2 |
3 |
->> |
object-json(b) |
text |
text |
通过键获得值。不存在则返回空。 |
'{“a”:1,“b”:2}'::json->>'b' |
2 |
#> |
container-json (b) |
text[] |
json(b) |
获取在指定路径的 JSON 对象,路径不存在则返回空。 |
'{“a”: {“b”:{“c”: “foo”}}}'::json #>'{a,b}' |
{“c”: “foo”} |
#>> |
container-json (b) |
text[] |
text |
获取在指定路径的 JSON 对象,路径不存在则返回空。 |
'{“a”:[1,2,3],“b”:[4,5,6]}'::json #>>'{a,2}' |
3 |
注意:
对于 #> 和 #>> 操作符,当给出的路径无法查找到数据时,不会报错,会返回空。
表 JSONB额外支持操作符
操作符 |
右操作数类型 |
描述 |
例子 |
@> |
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。 |
/ |
JSON/JSONB支持的函数
- array\_to\_json\(anyarray \[, pretty\_bool\]\)
描述:返回JSON类型的数组。一个多维数组成为一个JSON数组的数组。如果pretty\_bool为true,将在一维元素之间添加换行符。
返回类型:json
示例:
gbase=# SELECT array_to_json('{ {1,5},{99,100}}'::int[]);
array_to_json
------------------
[[1,5],[99,100]]
(1 row)
- row\_to\_json\(record \[, pretty\_bool\]\)
描述:返回JSON类型的行。如果pretty\_bool为true,将在第一级元素之间添加换行符。
返回类型:json
示例:
gbase=# SELECT row_to_json(row(1,'foo'));
row_to_json
---------------------
{"f1":1,"f2":"foo"}
(1 row)
- json_array_element(array-json, intege