Portal Community

Example 1 — Parse: Deserialize an HTTP Response Body

An HTTP Request node returns a raw JSON string in its body field. Parse it into a live object before accessing individual fields in downstream nodes.

{
  "node_type": "JsonTransform",
  "name": "ParseApiResponse",
  "config": {
    "operation": "parse",
    "source": "{@ output.CallExternalApi.body }"
  }
}

// source value: '{"status":"ok","data":{"userId":42,"plan":"pro"}}'
// transformed_data: { status: "ok", data: { userId: 42, plan: "pro" } }
// Access: {@ output.ParseApiResponse.transformed_data.data.userId }  → 42
Outcome: The raw string is parsed into a navigable object. Subsequent Data Mapping or Variable Assignment nodes can use dot-notation to access any field.

Example 2 — Stringify: Format a Payload for an Email Debug Log

A workflow processes a complex order object. Serialize it to a human-readable JSON string to embed in a diagnostic email sent to the engineering team.

{
  "node_type": "JsonTransform",
  "name": "StringifyOrderPayload",
  "config": {
    "operation": "stringify",
    "source": "{@ var.orderRecord }"
  }
}

// transformed_data (string):
// {
//   "orderId": "ORD-1234",
//   "customer": "Jane Doe",
//   "total": 486.00
// }
Outcome: The formatted JSON string can be pasted directly into an email body template: {@ output.StringifyOrderPayload.transformed_data }.

Example 3 — Extract: Pull a Single Nested Field

A deep API response contains a payment authorization code buried at response.payment.authorization.code. Extract just this value without setting up a full Data Mapping node.

{
  "node_type": "JsonTransform",
  "name": "ExtractAuthCode",
  "config": {
    "operation": "extract",
    "source_output": "ParsePaymentResponse",
    "property": "response.payment.authorization.code"
  }
}

// transformed_data: "AUTH-XK9M24"
Outcome: output.ExtractAuthCode.transformed_data = "AUTH-XK9M24". Assign to a variable for use in the receipt email and audit log.

Example 4 — Merge: Apply User Preference Overrides

A base notification configuration is defined in a global settings object. Per-user preferences should override specific fields. Merge them so user preferences take priority.

{
  "node_type": "JsonTransform",
  "name": "ApplyUserPreferences",
  "config": {
    "operation": "merge",
    "source": "{@ var.defaultNotificationConfig }",
    "merge_with": "{@ output.GetUserPreferences.data }"
  }
}

// defaultNotificationConfig: { channel: "email", frequency: "daily", language: "en" }
// GetUserPreferences.data:   { frequency: "weekly", language: "es" }
// transformed_data:          { channel: "email", frequency: "weekly", language: "es" }
Outcome: The user's preferred frequency and language override the defaults, while the email channel fallback is preserved.

Example 5 — Filter: Clean Null Entries from a Product List

A legacy inventory API returns an array that may contain null placeholders for deleted items. Remove them before processing.

{
  "node_type": "JsonTransform",
  "name": "CleanProductList",
  "config": {
    "operation": "filter",
    "source_output": "GetInventory"
  }
}

// GetInventory output: ["Widget A", null, "Widget B", null, null, "Widget C"]
// transformed_data:    ["Widget A", "Widget B", "Widget C"]
Outcome: The cleaned array contains only valid product entries. The downstream Loop node iterates without null-check conditionals inside the loop body.