How to Parse a JSON Response Using JMeter's JSON Extractor

As of JMeter 3.0, it’s far easier to extract data from JSON responses using the JSON variable extractor. JSON is an extremely simple data format which has taken over XML a few years ago.

An increasing number of REST APIs and servers, are using JSON as their primary data exchange format. Here, we will use JMeter to parse the JSON response.

If you don’t have JMeter installed, read this article which explains how to install JMeter on Mac OS.

Suppose we have a JSON response as follows:

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}

To parse the above JSON with JMeter, we need to add the JSON Extractor to our test plan.

Right click on Test Plan –> Add –> Post Processors –> JSON Extractor

Now, we should see the following view:

In the JSON Path expressions field, we can insert our JSON path to parse the JSON response

Here are some example Json Path expressions that can be used to extract data from the Json document exposed above:

+---------------------------------------+--------------------------------------------------------------+
| JSONPath                              | Result                                                       |
+---------------------------------------+--------------------------------------------------------------+
| $.store.book[*].author                | The authors of all books                                     |
| $..author                             | All authors                                                  |
| $.store.*                             | All things, both books and bicycles                          |
| $.store..price                        | The price of everything                                      |
| $..book[0,1]                          | The first two books                                          |
| $..book[:2]                           | All books from index 0 (inclusive) until index 2 (exclusive) |
| $..book[2:]                           | Book number two from tail                                    |
| $..book[?(@.isbn)]                    | All books with an ISBN number                                |
| $.store.book[?(@.price < 10)]         | All books in store cheaper than 10                           |
| $..book[?(@.price <= $[‘expensive’])] | All books in store that are not “expensive”                  |
| $..book[?(@.author =~ /.*REES/i)]     | All books matching regex (ignore case)                       |
| $..*                                  | Give me every thing                                          |
| $..book.length()                      | The number of books                                          |
+---------------------------------------+--------------------------------------------------------------+