PostgreSQL jsonb_path_query() Function
The PostgreSQL jsonb_path_query() function fetches the values in a given JSON according to the specified path and returns all matching values as a set.
jsonb_path_query() Syntax
This is the syntax of the PostgreSQL jsonb_path_query() function:
jsonb_path_query(
target JSONB
, path JSONPATH
[, vars JSONB
[, silent BOOLEAN]]
) -> SETOF JSONB
Parameters
target-
Required. The JSONB value to check.
path-
Required. The JSON path to check, it is of
JSONPATHtype . vars-
Optional. The variable values used in the path.
silent-
Optional. If this parameter is provided and is
true, the function suppresses the same errors as the@?and@@operators.
Return value
The PostgreSQL jsonb_path_query() function returns a set of JSONB values that contains all the values in the specified JSON value that match the specified path.
If any parameter is NULL, the jsonb_path_query() function will return NULL.
jsonb_path_query() Examples
JSON array
The following example shows how to use the PostgreSQL jsonb_path_query() function to get values from a JSON array according to a specified path.
SELECT jsonb_path_query('[1, 2, 3]', '$[*] ? (@ > 1)');
jsonb_path_query
------------------
2
3We can use variables in JSON paths like this:
SELECT jsonb_path_query(
'[1, 2, 3, 4]',
'$[*] ? (@ >= $min && @ <= $max)',
'{"min": 2, "max": 3}'
);
jsonb_path_query
------------------
2
3Here, we are using two variables min and max in the JSON path $[*] ? (@ >= $min && @ <= $max), and we have provided values for the variables in {"min": 2, "max": 3}, so that the JSON path becomes $[*] ? (@ >= 2 && @ <= 3). That is, this function is used to return all values that are greater than or equal to 2 and less than or equal to 3 in the array [1, 2, 3, 4].
JSON object
The following example shows how to use the PostgreSQL jsonb_path_query() function to get the values from a JSON object according to the specified path.
SELECT jsonb_path_query(
'{"x": 1, "y": 2, "z": 3}',
'$.* ? (@ >= 2)'
);
jsonb_path_query
------------------
2
3Here, JSON path $.* ? (@ >= 2) represents all values greater than 2 among the values of the top-level members in the JSON object {"x": 1, "y": 2, "z": 3}.