Skip to main content
In this guide, you’ll learn how to leverage JSONPath expressions to query, filter, and slice JSON arrays effectively. JSONPath is a powerful query language for JSON, enabling developers to pinpoint data within nested structures, perform conditional selections, and iterate through collections.

1. Defining an Array in JSON

Consider a JSON document representing a set of users:
{
  "users": [
    { "id": 1, "name": "Alice",   "age": 30 },
    { "id": 2, "name": "Bob",     "age": 24 },
    { "id": 3, "name": "Charlie", "age": 29 },
    { "id": 4, "name": "Diana",   "age": 22 }
  ]
}
Here, users is an array of objects. Each object has id, name, and age properties.

2. Accessing Array Elements

2.1 By Index

Pick a single element by its zero-based index:
$ jp query '$.users[0]'
Returns:
{ "id": 1, "name": "Alice", "age": 30 }
$ jp query '$.users[2]'
Returns:
{ "id": 3, "name": "Charlie", "age": 29 }

2.2 Using Wildcard

Retrieve all users with the wildcard *:
$ jp query '$.users[*]'
Returns:
[
  { "id": 1, "name": "Alice",   "age": 30 },
  { "id": 2, "name": "Bob",     "age": 24 },
  { "id": 3, "name": "Charlie", "age": 29 },
  { "id": 4, "name": "Diana",   "age": 22 }
]

2.3 Slicing the Array

Extract a range of elements with slice notation [start:end]:
$ jp query '$.users[1:3]'
Returns:
[
  { "id": 2, "name": "Bob",   "age": 24 },
  { "id": 3, "name": "Charlie", "age": 29 }
]
You can omit start or end:
  • [:2] → first two elements
  • [2:] → from the third element onward
JSONPath uses zero-based indices. Negative indices or step values (e.g., [::2]) are not supported in all implementations.

3. Filtering Array Elements

Apply a filter expression to select items matching a condition:
$ jp query '$.users[?(@.age >= 25)]'
Returns users aged 25 or older:
[
  { "id": 1, "name": "Alice",   "age": 30 },
  { "id": 3, "name": "Charlie", "age": 29 }
]

3.1 Accessing Properties of Filtered Results

Chain selectors to extract specific fields:
$ jp query '$.users[?(@.age >= 25)].name'
Returns:
["Alice", "Charlie"]

4. Nested Arrays

Given nested arrays, you can flatten or traverse them:
{
  "groups": [
    {
      "groupName": "Admins",
      "members": ["Alice", "Bob"]
    },
    {
      "groupName": "Developers",
      "members": ["Charlie", "Diana"]
    }
  ]
}
List all members across every group:
$ jp query '$.groups[*].members[*]'
Returns:
["Alice", "Bob", "Charlie", "Diana"]

5. Summary of JSONPath List Operators

OperatorDescriptionExample
[index]Selects a single element by position$.users[0]
[*]Wildcard to select all elements$.users[*]
[start:end]Slice array between start (inclusive) and end$.users[1:3]
[?()]Filter by expression$.users[?(@.age>25)]
Chaining (.)Traverse nested arrays or access properties$.groups[*].members[*]
By mastering these operators, you can query, transform, and navigate JSON arrays with precision.