SoftwareTestPilot
Free tool · 100% in-browser · no signup

JSON / JSONPath / JMESPath Tester

Paste any API response, run JSONPath and JMESPath side by side, build assertions, and export ready-to-paste code for Postman, Rest Assured, and Playwright. Runs entirely in your browser — your payload never leaves your machine.

jsonpath-plus engineAWS-compatible JMESPathcURL importAssertion builderJSON Schema generatorJSON diffPostman + Rest Assured + Playwright export

JSON payload

Valid JSON
3 match(es)
[
  "alice@example.com",
  "bob@example.com",
  "carol@other.com"
]
[
  "alice@example.com",
  "bob@example.com"
]
Sample queries

Why API testers need both JSONPath and JMESPath in one tool

Every REST or GraphQL API test eventually reduces to one question: did the response contain the value we expected, in the shape we expected? JSONPath and JMESPath are the two query languages that answer it — but most online testers only support one. This tool runs both side by side against the same payload so you can pick the right language per assertion, then export the exact code your test framework needs.

What each language is best at

FeatureJSONPathJMESPath
Recursive descent (find any $..email)✅ $..email❌ needs explicit path
Filter expressions✅ [?(@.active)]✅ [?active]
Built-in functions (length, sort, max)⚠️ limited✅ 30+ functions
Pipe results through transformations✅ users | [?active] | length(@)
Postman / Rest Assured native support✅ first-class⚠️ needs library
AWS CLI / Ansible / Azure CLI support✅ native
Formal specification⚠️ community✅ jmespath.org spec

Common API-testing recipes (copy-paste ready)

All admin emails
JSONPath: $.data.users[?(@.role=='admin')].email
JMESPath: data.users[?role=='admin'].email
Count active users
JSONPath: $.data.users[?(@.active)].length
JMESPath: length(data.users[?active])
First error message
JSONPath: $.errors[0].message
JMESPath: errors[0].message
Any status code >= 500
JSONPath: $..status[?(@ >= 500)]
JMESPath: responses[?status >= `500`].status
Assert response wrapper
JSONPath: $.status == 'ok'
JMESPath: status == 'ok'
Extract IDs into array
JSONPath: $.data.users[*].id
JMESPath: data.users[*].id

How to use this tool with Postman, Rest Assured & Playwright

Four short workflows — pick your framework, follow the numbered steps, paste the exported code straight into your test suite.

Workflow 1
Postman
  1. 1In Postman, open your request → Body tab → copy the response JSON.
  2. 2Paste it into the JSON panel here and write your JSONPath query.
  3. 3Click Export → Postman to get a ready pm.test block.
  4. 4Paste it into the Tests tab of your Postman request and hit Send.
pm.test("user id is 42", () => {
  const data = pm.response.json();
  pm.expect(jsonpath.query(data, "$.user.id")[0]).to.eql(42);
});
Workflow 2
Rest Assured (Java)
  1. 1Paste your API response JSON into the JSON panel.
  2. 2Write a JSONPath expression — Rest Assured's GPath is a JSONPath subset.
  3. 3Click Export → Rest Assured for a given/when/then chain.
  4. 4Drop it into your JUnit / TestNG class with matchers like hasItem().
given()
  .when().get("/api/users/42")
  .then().statusCode(200)
  .body("user.id", equalTo(42));
Workflow 3
Playwright API tests
  1. 1Capture the JSON response from your endpoint (or import via cURL).
  2. 2Validate it here with JSONPath or JMESPath until you get the expected value.
  3. 3Click Export → Playwright for a full test() block.
  4. 4Paste into your tests/api/ folder and run npx playwright test.
test("GET /users/42", async ({ request }) => {
  const res = await request.get("/api/users/42");
  const body = await res.json();
  expect(body.user.id).toBe(42);
});
Workflow 4
Newman / CI/CD
  1. 1Export your assertions as Postman tests (step above).
  2. 2Save the request into a Postman collection and export it as JSON.
  3. 3Run it headless in CI with newman run collection.json.
  4. 4Gate PRs on API contracts — see our CI/CD guide.
# .github/workflows/api.yml
- run: npx newman run collection.json \
    --env-var baseUrl=$STAGING_URL \
    --reporters cli,junit

Tip: the same JSON payload works across all four frameworks — validate once here, export everywhere. For deeper patterns see our Playwright interview prep and API testing Q&A hub.

Why we built this — features competitors don't have

FeatureThis tooljsonpath.comjmespath.org playground
JSONPath + JMESPath in one UI
Live assertion builder
Postman / Rest Assured / Playwright code export
cURL import
JSON Schema auto-generation
JSON diff between payloads
100% in-browser (safe for internal data)
Free, no signup, no ads

Related resources

Frequently asked questions

1.Is this JSON / JSONPath / JMESPath tester really free?
Yes — 100% free, no signup, no ads, and no upload. Every query runs inside your browser using jsonpath-plus and the official @jmespath-community/jmespath library. Your JSON payload never touches our servers, so it's safe for internal API responses and production data you can't send to hosted competitors.
2.What's the difference between JSONPath and JMESPath?
JSONPath (Stefan Goessner, 2007) is the older, XPath-inspired syntax used by Postman's pm.expect().to.have.jsonPath(), Rest Assured, and Newman. JMESPath (Amazon, 2013) is the modern, formally-specified language used by the AWS CLI, Ansible, and Azure CLI. JMESPath has richer functions (length(), sort(), map(), pipes) but JSONPath has broader ecosystem support in test frameworks. This tool runs both side by side so you can pick the right one per assertion.
3.Which JSONPath library does this use?
It uses jsonpath-plus, the most widely-adopted JSONPath implementation on npm (60M+ weekly downloads). Filter expressions ($..books[?(@.price < 10)]), script expressions, and recursive descent all work. Results match what Postman's tv4 evaluator and Rest Assured produce for the same expression.
4.Can I import a cURL command instead of pasting JSON?
Yes. Click 'Import cURL' and paste any cURL command you copied from Chrome DevTools or Postman. The tool extracts the URL, headers, and body so you can document the exact API call the assertion targets — then paste the response JSON to query it. All of this runs locally; no request is fired from our servers.
5.Does the tool generate Postman, Rest Assured, or Playwright assertion code?
Yes. Once a query returns the expected value, click 'Export' and pick your target: Postman (pm.test + pm.expect), Rest Assured (Java given/when/then), or Playwright API test (expect(response).toEqual). The tool converts your JSONPath or JMESPath into an idiomatic assertion so you can paste it straight into your test suite.
6.Can I chain multiple assertions?
Yes. The Assertions tab lets you add checks like 'path $.data.users.length == 5', 'path $.status == 200', 'path $..email contains @example.com'. Every assertion runs live against your JSON and shows pass/fail with the actual vs expected value — great for API contract testing.
7.What makes this different from jsonpath.com or jmespath.org playground?
Five things competitors don't offer: (1) both JSONPath and JMESPath in one UI so you can compare results per expression; (2) a live assertion builder for API contract tests; (3) code export to Postman, Rest Assured, and Playwright; (4) JSON Schema auto-generation from your sample payload; (5) JSON diff between two payloads. Plus it's 100% local — no upload, no rate limit.
8.Does it validate JSON and show error line numbers?
Yes. Malformed JSON is flagged with the exact line and column of the parse error (e.g. 'Unexpected token } at line 12 col 4'), plus a one-click Format (pretty-print) and Minify. This matches the diagnostics you'd get from JSONLint or Jayway JsonPath — but in a single pane with your query.

100% in-browser. Zero uploads.

Every byte of your JSON stays on your machine. Safe for internal API payloads, production data, and anything you can't send to a hosted service.