2026년 9월 13일 내용 개정. 공식 문서와 대조해 설명과 예제를 정리했습니다. 설치 버전에 따라 화면과 옵션 이름은 달라질 수 있습니다.
모든 행에 첫 번째 사람의 이름이 반복되거나, 세 번째 데이터를 읽으려다 오류가 나는 경우에는 참조 방식부터 확인하세요. 이 글은 현재 아이템, 연결된 이전 아이템, 순번으로 고른 아이템을 구분하는 연습입니다. 표현식은 값을 넣는 필드의 Expression 모드에서 사용합니다.
이 글에서 확인할 내용: 현재 아이템과 이전 노드의 연결된 아이템, 첫 아이템, 전체 아이템 참조를 비교합니다. 대표 사진과 본문 사진은 작업 환경 참고용입니다. 대표 사진: charlesdeluvio / Unsplash.

1. 실습할 데이터 준비
Manual Trigger 다음에 Code 노드를 연결하고 이름을 Sample로 지정합니다. JavaScript / Run Once for All Items에서 다음 데이터를 반환합니다.
return [
{ json: { id: "A101", name: "민준", amount: 12000 } },
{ json: { id: "A102", name: "지수", amount: 0 } },
{ json: { id: "A103", name: "서연", amount: 8000 } }
];
Sample 뒤에 Edit Fields를 연결하고 Include Other Input Fields를 켭니다. 아래 표현식마다 새 String 또는 Number 필드를 만들어 값을 비교합니다. 이전 노드 이름을 다르게 지정했다면 Sample 부분도 정확히 바꿔야 합니다.
2. 참조 네 가지 비교
| 표현식 | 읽는 대상 | 예제 결과 |
|---|---|---|
| {{ $json.name }} | 현재 입력의 이름 | 민준 / 지수 / 서연 |
| {{ $(‘Sample’).item.json.name }} | 현재 아이템과 연결된 Sample 아이템 | 직접 연결한 이 예제에서는 각자 이름 |
| {{ $(‘Sample’).first().json.name }} | Sample의 첫 아이템 | 세 아이템 모두 민준 |
| {{ $(‘Sample’).all()[2].json.name }} | Sample 출력 배열의 인덱스 2 | 세 아이템 모두 서연 |
인덱스는 0부터 시작합니다. .item은 순번을 인자로 받는 함수가 아니므로 .item(2)로 세 번째 아이템을 고르면 안 됩니다. .item은 연결 관계를 추적하며, 첫 아이템을 의미하지도 않습니다. 이 구분은 공식 참조 문서에 정의돼 있습니다.
3. 세 번째 아이템이 없을 때
{{ $('Sample').all()[2]?.json.name ?? '세 번째 데이터 없음' }}
Sample에서 마지막 아이템을 지워 2개만 반환한 뒤 다시 실행합니다. 위 표현식의 결과는 ‘세 번째 데이터 없음’이어야 합니다. 다만 Sample이 실행되지 않은 분기에 있다면 이 방식만으로 모든 참조 오류를 막을 수는 없습니다. 노드 실행 여부와 분기 연결을 먼저 확인하세요.

4. 0·빈 문자열·공백을 구분하기
| 표현식 | 주의할 의미 |
|---|---|
| {{ $json.amount ?? 100 }} | null 또는 값 없음만 100으로 대체; 0 유지 |
| {{ $json.amount || 100 }} | 0도 100으로 바뀜 |
| {{ String($json.name ?? ”).trim() }} | 값을 문자열로 다루고 앞뒤 공백 제거 |
| {{ $json.customer?.email ?? ‘미등록’ }} | customer 또는 email이 null·없는 경우 대체 |
이 예제 A102의 amount는 0입니다. ??를 사용하면 0이 유지되고 ||를 사용하면 100이 됩니다. 무료 신청 같은 데이터를 다룰 때 이 차이가 결과를 바꿉니다. 또한 ??는 빈 문자열을 바꾸지 않습니다. 공백 이름을 막으려면 trim 후 길이를 검사해야 합니다.
5. 배열은 필요한 값만 골라 보기
현재 json에 courses: [‘엑셀’, ‘PPT’]가 있다면 다음 표현식으로 한 줄의 교육명을 만들 수 있습니다. 배열인지 먼저 확인하므로 null이나 문자열이 들어와도 join 오류를 피합니다.
{{ Array.isArray($json.courses) ? $json.courses.join(', ') : '교육명 확인 필요' }}
수정할 조건이 여러 개라 표현식이 길어지면 Code 노드로 옮겨 입력과 출력 필드를 명확히 하세요. Code 노드에서는 실행 모드에 따라 쓸 수 있는 변수가 다르므로, 표현식의 {{ }} 전체를 코드 본문에 그대로 붙여 넣지 않습니다.

6. 이름이 엉킬 때 점검 순서
- 현재 노드 Input에서 원하는 필드가 실제로 존재하는지 확인합니다.
- 노드 이름의 대소문자·공백과 실행 순서를 확인합니다.
- 전체 행에 동일한 값이 나오면 first()나 고정 인덱스를 사용 중인지 확인합니다.
- 필터·합계·재정렬 뒤 .item 오류라면 아이템 연결 정보를 확인합니다.
- 사람별 데이터 결합에는 applicationId 같은 고유 키를 사용하고 순번 대응을 가정하지 않습니다.
API 키는 표현식에 직접 적어 넣기보다 해당 서비스의 Credentials에 저장합니다. 환경 변수 접근 가능 여부는 설치 설정에 따라 다르며, 접근이 제한됐다고 보안 설정을 무조건 해제해서는 안 됩니다.
함께 읽을 실습
n8n JSON 데이터 정리: 문자열 금액 변환과 누락값 검사
n8n 반복과 Merge: 배치 처리·ID 기준 병합 실습