{
  "name": "🎓 Learn n8n expressions with an interactive step-by-step tutorial for beginners",
  "nodes": [
    {
      "id": "2c20bdef-e54e-46ab-9c63-5cf521ec749e",
      "name": "Start Tutorial",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -7360,
        992
      ]
    },
    {
      "id": "25703548-3e48-4951-9e3b-1d7815e15af5",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -7616,
        592
      ],
      "parameters": {
        "width": 640,
        "height": 560,
        "content": "# Tutorial - Mastering n8n Expressions\n\nWelcome! You know what JSON is. Now, let's learn how to **use it**. This workflow teaches you how to pull data from one node and use it in another using n8n's p"
      }
    },
    {
      "id": "b875f86c-a790-49bc-96a0-e1ccc72a5e80",
      "name": "Source Data",
      "type": "n8n-nodes-base.set",
      "position": [
        -6720,
        992
      ]
    },
    {
      "id": "108d6d9a-6e98-491d-87c1-78d3680f0c40",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -6944,
        640
      ],
      "parameters": {
        "width": 520,
        "height": 520,
        "content": "## Our Data Source\n\nThis node holds all the sample data for our tutorial. Think of it as a filing cabinet. All the other nodes will be reaching into this cabinet to pull out specific pieces of informa"
      }
    },
    {
      "id": "54723ed3-94c5-4104-b1c5-3ac70c262b87",
      "name": "1. The Basics",
      "type": "n8n-nodes-base.set",
      "position": [
        -6192,
        992
      ]
    },
    {
      "id": "81dc9611-b9b5-41c3-a5ab-460cb0dc1ca6",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -6400,
        576
      ],
      "parameters": {
        "width": 500,
        "height": 580,
        "content": "## Lesson 1: Accessing a Simple Value\n\nThis is the most common thing you'll do in n8n.\n\n**The Goal:** Get the user's name from the \"Source Data\" node.\n\n**The Expression:** `{{ $('Source Data').item.js"
      }
    },
    {
      "id": "b91f6099-5207-4000-9a0e-e6374718c123",
      "name": "3. Working with Arrays",
      "type": "n8n-nodes-base.set",
      "position": [
        -4960,
        992
      ]
    },
    {
      "id": "2074d65b-2d6b-41af-a4f9-fa9a195a1bf8",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -5168,
        624
      ],
      "parameters": {
        "width": 540,
        "height": 520,
        "content": "## Lesson 3: Accessing an Array Element\n\nWhat if the data is in a list (an array)? You need to specify *which* item you want.\n\n**The Goal:** Get the user's *second* skill.\n\n**The Expression:** `{{ $('"
      }
    },
    {
      "id": "8ccc139f-0e8c-4c25-9d04-cecf2b335934",
      "name": "4. Going Deeper",
      "type": "n8n-nodes-base.set",
      "position": [
        -4400,
        992
      ]
    },
    {
      "id": "34264c0c-8282-4b57-a066-0548a31cbf1a",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -4608,
        672
      ],
      "parameters": {
        "width": 540,
        "height": 480,
        "content": "## Lesson 4: Accessing Nested Data\n\nSometimes, data is organized into objects within other objects.\n\n**The Goal:** Get the user's email address.\n\n**The Expression:** `{{ $('Source Data').last().json.c"
      }
    },
    {
      "id": "4c41fb6a-5f93-408f-9583-1e118d139dcf",
      "name": "5. The Combo Move",
      "type": "n8n-nodes-base.set",
      "position": [
        -3808,
        992
      ]
    },
    {
      "id": "2123cd02-5cb6-4dd7-89e5-7af1c6edf234",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -4048,
        672
      ],
      "parameters": {
        "width": 580,
        "height": 480,
        "content": "## Lesson 5: Accessing Data in an Array of Objects\n\nThis is the ultimate test of the previous lessons!\n\n**The Goal:** Get the *status* of the *first* project in the list.\n\n**The Expression:** `{{ $('S"
      }
    },
    {
      "id": "f25a5a9d-518d-4a4a-b2ad-36fd0e1f5bd2",
      "name": "6. A Touch of Magic",
      "type": "n8n-nodes-base.set",
      "position": [
        -3200,
        992
      ]
    },
    {
      "id": "0ebf5e6b-feb8-4f32-9979-9d7555b461ed",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -3440,
        640
      ],
      "parameters": {
        "width": 580,
        "height": 520,
        "content": "## Lesson 6: A Touch of Magic (JS Functions)\n\nYou can do more than just retrieve data; you can **manipulate and inspect it!**\n\n**The Expressions:**\n- **Transform Text:** `{{ $('Source Data').last().js"
      }
    },
    {
      "id": "81d8c2d6-95cc-47e3-b0f0-9c698a120d1c",
      "name": "9. The \"All Items\" View",
      "type": "n8n-nodes-base.set",
      "position": [
        -1264,
        992
      ]
    },
    {
      "id": "609e27f8-1702-493e-bc8b-cbade4561bd2",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1696,
        640
      ],
      "parameters": {
        "width": 780,
        "height": 520,
        "content": "## Lesson 9: Working with Multiple Items (`$items` & Arrow Functions)\n\nWhat if a node outputs *multiple* items and you want to summarize them? `$items()` is your tool.\n\n**The Goal:** Get a single, com"
      }
    },
    {
      "id": "d6afc595-c6f0-47b2-894e-b03d6a0227ee",
      "name": "Final Exam",
      "type": "n8n-nodes-base.set",
      "position": [
        -688,
        992
      ]
    },
    {
      "id": "99a7fb24-491c-436e-a775-6fabdc2c4004",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -896,
        736
      ],
      "parameters": {
        "width": 520,
        "height": 420,
        "content": "## 🎓 FINAL EXAM: Putting It All Together\n\nThis node uses everything we've learned to build a final summary object.\n\nLook at the expressions for each field. They pull data from different nodes and use "
      }
    },
    {
      "id": "c3f2fd66-784d-4675-8cb3-72dd33e6ee4e",
      "name": "2. The n8n Selectors",
      "type": "n8n-nodes-base.set",
      "position": [
        -5568,
        992
      ]
    },
    {
      "id": "bade9e22-6e9d-4f25-a1b7-974cbf2d5c61",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -5872,
        528
      ],
      "parameters": {
        "width": 680,
        "height": 620,
        "content": "## Lesson 2: The n8n Selectors (`.first()`, `.last()`, `.all()`)\n\nIn the last lesson, we used `.item`. When there is only one output item from a node, this is equivalent to `.last()`. Using `.last()` "
      }
    },
    {
      "id": "7c4b718e-fca8-4dbe-8b3b-d6aeeaa78d6d",
      "name": "7. Inspecting Objects",
      "type": "n8n-nodes-base.set",
      "position": [
        -2640,
        992
      ]
    },
    {
      "id": "089b02d1-e43b-4baf-8bcf-b2dd7a95df92",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2832,
        640
      ],
      "parameters": {
        "width": 500,
        "height": 520,
        "content": "## Lesson 7: Inspecting Objects (`Object.keys()`)\n\nWhat if you have an object but you don't know what keys are inside it? `Object.keys()` comes to the rescue.\n\n**The Goal:** Get a list of all the keys"
      }
    },
    {
      "id": "81a16f66-4fca-47af-841c-91e16ff9587e",
      "name": "8. Utility Functions",
      "type": "n8n-nodes-base.set",
      "position": [
        -2064,
        992
      ]
    },
    {
      "id": "b7aea910-5fd6-420f-9814-77afb8ab9517",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2304,
        640
      ],
      "parameters": {
        "width": 580,
        "height": 520,
        "content": "## Lesson 8: Utility Functions (`JSON.stringify()`)\n\nSometimes you need to convert a structured JSON object back into a clean, single string. This is common when sending data to another service, like "
      }
    },
    {
      "id": "2b83f9a2-7c71-43bb-b940-d0c3204cf6a2",
      "name": "Split Out Skills",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -1488,
        992
      ]
    },
    {
      "id": "933a0592-2deb-4db7-b801-d52dbbed1252",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        -128
      ],
      "parameters": {
        "width": 540,
        "height": 1280,
        "content": "## Was this helpful? Let me know!\n[![clic](https://supastudio.ia2s.app/storage/v1/object/public/assets/n8n/clic_down_lucas.gif)](https://n8n.ac)\n\nI really hope this tutorial helped you understand n8n "
      }
    },
    {
      "id": "efc93cff-1e16-46fc-a839-7cca5ccd27f8",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -896,
        304
      ],
      "parameters": {
        "width": 512,
        "height": 408,
        "content": "## [>> Go to Eval Workflow <<](https://n8n.io/workflows/6236)\n\nVerify your skills with a complete eval workflow to put your Expression Skills to the test.\n[![Test Skills](https://supastudio.ia2s.app/s"
      }
    }
  ],
  "connections": {
    "Source Data": {
      "main": [
        [
          {
            "node": "1. The Basics",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1. The Basics": {
      "main": [
        [
          {
            "node": "2. The n8n Selectors",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Start Tutorial": {
      "main": [
        [
          {
            "node": "Source Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4. Going Deeper": {
      "main": [
        [
          {
            "node": "5. The Combo Move",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out Skills": {
      "main": [
        [
          {
            "node": "9. The \"All Items\" View",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5. The Combo Move": {
      "main": [
        [
          {
            "node": "6. A Touch of Magic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6. A Touch of Magic": {
      "main": [
        [
          {
            "node": "7. Inspecting Objects",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2. The n8n Selectors": {
      "main": [
        [
          {
            "node": "3. Working with Arrays",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8. Utility Functions": {
      "main": [
        [
          {
            "node": "Split Out Skills",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7. Inspecting Objects": {
      "main": [
        [
          {
            "node": "8. Utility Functions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "3. Working with Arrays": {
      "main": [
        [
          {
            "node": "4. Going Deeper",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9. The \"All Items\" View": {
      "main": [
        [
          {
            "node": "Final Exam",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}