Quester Studio

extract

Pull a value from the previous node output with JMESPath

Selects a value from the previous node’s output using JMESPath.

For run-panel / --input fields, use {{input.*}} in templates (or a template / set node) — not extract.

Do not type previous.body or input.abc in the JMESPath expression. After an HTTP node the root is the response — use body.id, body.title, status. Diagrams: How flows work.

in ×1 extract out ×1
JMESPath over wire JSON (body.id, products[0]). Multiple outgoing edges (fan-out) share the same output.

Data

FieldTypeDescription
labelstringOptional UI label
expressionstringrequired

Input / output

Value
Execute inputPrevious node output (the JSON root for JMESPath)
OutputResult of the expression (any JSON type, or null if missing)

Downstream:

  • The next node’s input is the extracted value (not the full previous object).
  • Templates can use {{nodes.<extractId>}}.
http (full response) → extract (body.id → 42) → http (url uses {{nodes.userId}})

Example — field from HTTP response

Previous node output:

{
  "status": 201,
  "body": { "id": 42, "email": "demo@example.com" },
  "text": "{\"id\":42,\"email\":\"demo@example.com\"}",
  "headers": {},
  "request": { "method": "POST", "url": "https://api.example.com/users", "headers": {} },
  "timing": { "startedAt": 0, "endedAt": 10, "durationMs": 10 },
  "size": 40
}

Node:

{
  "id": "userId",
  "type": "extract",
  "data": {
    "label": "User id",
    "expression": "body.id"
  }
}
Value
Output42
Later{{nodes.userId}}"42"

Example — nested object

{
  "id": "user",
  "type": "extract",
  "data": { "expression": "body" }
}

Output: { "id": 42, "email": "demo@example.com" }
Then {{nodes.user.email}}"demo@example.com".

Example — need a run-input field instead

Do not use extract. Use a template on the next HTTP node:

{
  "headers": { "X-User-Email": "{{input.email}}" }
}

Or capture it with set / template:

{
  "type": "set",
  "data": { "variables": { "email": "{{input.email}}" } }
}

If you truly need JMESPath over the run payload, place an input node immediately before extract so previous is that object, then express email (not input.email).

Example — missing path

{ "expression": "body.missing" }

Output: null · {{nodes.userId}}"".

More JMESPath examples

Assume previous output:

{
  "body": {
    "items": [{ "id": 9, "name": "a" }, { "id": 10, "name": "b" }],
    "users": [
      { "name": "Ada", "active": true },
      { "name": "Bob", "active": false }
    ]
  }
}
ExpressionOutput
body.items[0].id9
body.users[?active].name | [0]"Ada"
body.items[*].name["a", "b"]