Querying JSONB with JSONPath
Apply SQL/JSON path expressions to filter and extract nested values with index support.
Why JSONPath for JSONB
PostgreSQL stores semi-structured data in the jsonb type. Pulling nested values with the classic -> and ->> operators works, but gets clumsy fast for deep paths, arrays, and conditional filters.
The SQL/JSON path language (added in PostgreSQL 12) gives you a compact, expressive way to navigate and filter JSON. It powers two key functions:
jsonb_path_query/jsonb_path_query_array— extract matching valuesjsonb_path_existsand the@?/@@operators — test predicates
Best of all, those operators can be accelerated by a GIN index, which is exactly what this lesson is about.
A sample JSONB document
Imagine an orders table with a data jsonb column. A single row might hold a document like the one below.
Throughout this lesson we will navigate into customer, iterate over the items array, and filter by numeric and string conditions.
SELECT '{
"id": 1042,
"status": "shipped",
"customer": { "name": "Mara", "tier": "gold" },
"items": [
{ "sku": "A-1", "qty": 2, "price": 19.90 },
{ "sku": "B-7", "qty": 1, "price": 4.50 }
]
}'::jsonb AS data;All lessons in this course
- JSONB Operators and Containment Queries
- GIN vs Expression Indexes on JSONB
- Querying JSONB with JSONPath
- When to Normalize Out of JSONB