更新时间:2025-05-29 GMT+08:00

JSON/JSONB函数和操作符

JSON/JSONB数据类型参考JSON/JSONB类型,操作符信息如表1表2所示。

表1 JSON/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)

对于 #> 和 #>> 操作符,当给出的路径无法查找到数据时,不会报错,会返回空。

表2 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。

/