JSON/JSONB Functions and Operators
For details about the JSON/JSONB data type, see JSON/JSONB Types. Related operators are described in Table 1 and Table 2.
Operator |
Left Operand Type |
Right Operand Type |
Return Type |
Description |
Example |
---|---|---|---|---|---|
-> |
Array-json(b) |
int |
json(b) |
Obtains the array-json element. If the index is not found, NULL will be returned. |
SELECT '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json->2; ?column? ------------- {"c":"baz"} (1 row) |
-> |
object-json(b) |
text |
json(b) |
Obtains the value of a key. If no value is found, NULL will be returned. |
SELECT '{"a": {"b":"foo"}}'::json->'a'; ?column? ------------- {"b":"foo"} (1 row) |
->> |
Array-json(b) |
int |
text |
Obtains JSON array elements. If the index is not found, NULL will be returned. |
SELECT '[1,2,3]'::json->>2; ?column? ---------- 3 (1 row) |
->> |
object-json(b) |
text |
text |
Obtains the value of a key. If no value is found, NULL will be returned. |
SELECT '{"a":1,"b":2}'::json->>'b'; ?column? ---------- 2 (1 row) |
#> |
container-json (b) |
text[] |
json(b) |
Obtains the JSON object in the specified path. If the path is not found, null will be returned. |
SELECT '{"a": {"b":{"c": "foo"}}}'::json #>'{a,b}'; ?column? -------------- {"c": "foo"} (1 row) |
#>> |
container-json (b) |
text[] |
text |
Obtains the JSON object in the specified path. If the path is not found, null will be returned. |
SELECT '{"a":[1,2,3],"b":[4,5,6]}'::json #>>'{a,2}'; ?column? ---------- 3 (1 row) |

For the #> and #>> operators, if no data is found in the specified path, the function will return null instead of reporting an error.
Operator |
Right Operand Type |
Description |
Example |
---|---|---|---|
@> |
jsonb |
Specifies whether the top layer of the left JSON contains all items at the top layer of the right JSON. |
'{"a":1, "b":2}'::jsonb @> '{"b":2}'::jsonb |
<@ |
jsonb |
Specifies whether all items of the left JSON are present at the top layer of the right JSON. |
'{"b":2}'::jsonb <@ '{"a":1, "b":2}'::jsonb |
? |
text |
Specifies whether the string of the key or element is present at the top layer of the JSON value. |
'{"a":1, "b":2}'::jsonb ? 'b' |
?| |
text[] |
Specifies whether any of these array strings is present as a top-layer key. |
'{"a":1, "b":2, "c":3}'::jsonb ?| array['b', 'c'] |
?& |
text[] |
Specifies whether all these array strings are present as top-layer keys. |
'["a", "b"]'::jsonb ?& array['a', 'b'] |
= |
jsonb |
Determines the size between two JSONB files, which is the same as the jsonb_eq function. |
/ |
<> |
jsonb |
Determines the size between two JSONB files, which is the same as the jsonb_ne function. |
/ |
< |
jsonb |
Determines the size between two JSONB files, which is the same as the jsonb_lt function. |
/ |
> |
jsonb |
Determines the size between two JSONB files, which is the same as the jsonb_gt function. |
/ |
<= |
jsonb |
Determines the size between two JSONB files, which is the same as the jsonb_le function. |
/ |
>= |
jsonb |
Determines the size between two JSONB files, which is the same as the jsonb_ge function. |
/ |
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.