| title | PostgreSQL jsonb_path_query_array() Function | ||||
|---|---|---|---|---|---|
| page_title | PostgreSQL jsonb_path_query_array() Function | ||||
| page_description | Use the PostgreSQL jsonb_path_query_array() function to query JSONB data using a JSON path and return matched elements as a JSON array. | ||||
| prev_url | https://www.postgresqltutorial.com/postgresql-json-functions/postgresql-jsonb_path_query_array/ | ||||
| ogImage | |||||
| updatedOn | 2024-02-24T02:02:31+00:00 | ||||
| enableTableOfContents | true | ||||
| previousLink |
|
||||
| nextLink |
|
Summary: in this tutorial, you will learn how to use the PostgreSQL jsonb_path_query_array() function to query JSONB data using a JSON path and return matched elements as a JSON array.
The jsonb_path_query_array() function allows you to query JSONB data using a JSON path expression.
Here’s the basic syntax of the jsonb_path_query_array() function:
jsonb_path_query_array(jsonb_data, json_path)In this syntax:
- First, specify the
jsonb_datathat you want to query. - Second, provide a
json_paththat you want to match elements within thejsonb_data.
The jsonb_path_query_array() function returns the matched elements as a JSON array.
If the function does not find any matched element, it returns an empty array.
If either argument is NULL, the function returns NULL.
Let’s explore some examples of using the jsonb_path_query_array() function
The following example uses the jsonb_path_query_array() function to get the employee names as an array:
SELECT
jsonb_path_query_array(
'{"employees": [{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]}',
'$.employees[*].name'
);Output:
jsonb_path_query_array
------------------------
["Alice", "Bob"]
(1 row)
In this example, the JSON path expression $.employees[*].name locates the value of the name key of all elements in the employees array.
First, create a new table called employees:
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
data JSONB
);In the employees table, the data column has the type of JSONB.
Second, insert some rows into the employees table:
INSERT INTO employees (data) VALUES
('{"name": "Alice", "age": 30, "pets": [{"type": "cat", "name": "Fluffy"}, {"type": "dog", "name": "Buddy"}]}'),
('{"name": "Bob", "age": 35, "pets": [{"type": "dog", "name": "Max"}]}'),
('{"name": "Charlie", "age": 40, "pets": [{"type": "rabbit", "name": "Snowball"}]}')
RETURNING *;Output:
id | data
----+-------------------------------------------------------------------------------------------------------------
1 | {"age": 30, "name": "Alice", "pets": [{"name": "Fluffy", "type": "cat"}, {"name": "Buddy", "type": "dog"}]}
2 | {"age": 35, "name": "Bob", "pets": [{"name": "Max", "type": "dog"}]}
3 | {"age": 40, "name": "Charlie", "pets": [{"name": "Snowball", "type": "rabbit"}]}
(3 rows)
Third, use the jsonb_path_query_array() function to retrieve the pet names of employees as a JSON array:
SELECT jsonb_path_query_array(data, '$.pets[*].name') AS employee_pet_names
FROM employees;Output:
employee_pet_names
---------------------
["Fluffy", "Buddy"]
["Max"]
["Snowball"]
(3 rows)
If the specified path doesn’t exist in the JSONB data, the jsonb_path_query_array() function returns an empty array. For example:
SELECT jsonb_path_query_array(data, '$.address')
FROM employees;Output:
jsonb_path_query_array
------------------------
[]
[]
[]
(3 rows)
In this example, the employee object doesn’t have an address key, so the result is an empty array.
- Use the
jsonb_path_query_array()function to query JSONB data using a JSON path and return matched elements as a JSON array.