n8n JSON 데이터 정리: 문자열 금액 변환과 누락값 검사

n8n 자동화읽기 약 6분

2026년 9월 13일 내용 개정. 공식 문서와 대조해 설명과 예제를 정리했습니다. 설치 버전에 따라 화면과 옵션 이름은 달라질 수 있습니다.

외부에서 받은 금액이 숫자 12000이 아니라 문자열 ‘12,000’이면 바로 비교하거나 더할 때 문제가 생길 수 있습니다. 이 실습에서는 이름의 공백을 정리하고 금액을 숫자로 바꾸되, 비어 있거나 잘못된 값은 확인 대상으로 남깁니다. 정상값으로 보이게 만드는 것보다 잘못된 입력을 구별하는 것이 목표입니다.

이 글에서 확인할 내용: 문자열 금액을 정리하고 누락값을 분리한 뒤 변환 결과와 합계를 확인합니다. 대표 사진과 본문 사진은 작업 환경 참고용입니다. 대표 사진: Danial Igdery / Unsplash.

화면의 코드를 집중해서 확인하는 사람
화면의 코드를 집중해서 확인하는 사람. 자동화·개발 작업 환경을 보여주는 참고 사진이며 실제 n8n 실행 화면은 아닙니다. 사진: charlesdeluvio / Unsplash

1. 먼저 입력 형식을 정하기

예제에서 허용하는 금액은 0 이상의 정수, 또는 12,000처럼 세 자리마다 쉼표가 있는 문자열입니다. 원 단위 정수만 처리하므로 음수·소수·통화 기호가 필요하다면 규칙을 따로 확장해야 합니다. ‘1,2’처럼 잘못된 쉼표 표기를 12로 받아들이지 않도록 검사합니다.

Manual Trigger 뒤에 Sample이라는 Code 노드를 만들고 JavaScript / Run Once for All Items에서 실행합니다.

return [
  { json: { id: "A101", name: " 민준 ", amount: "12,000" } },
  { json: { id: "A102", name: "지수", amount: "" } },
  { json: { id: "A103", name: "서연", amount: "1,2" } },
  { json: { id: "A104", name: "도윤", amount: 0 } }
];

2. Code 노드로 정리하기

두 번째 Code 노드를 연결하고 동일한 실행 모드를 사용합니다. 현재 입력은 $input.all()로 가져옵니다. 과거 Function 예제의 items 변수가 현재 Code에 자동으로 있다고 가정하지 마세요. 모드 차이는 Code 공식 문서에서 확인할 수 있습니다.

const input = $input.all();
return input.map((item, index) => {
  const raw = item.json.amount;
  const text = typeof raw === "string" ? raw.trim() : "";
  const validText = /^([0-9]+|[0-9]{1,3}(,[0-9]{3})+)$/.test(text);
  const amount = typeof raw === "number"
    ? raw
    : validText ? Number(text.replace(/,/g, "")) : NaN;
  const valid = Number.isSafeInteger(amount) && amount >= 0;
  const cleanName = String(item.json.name ?? "").trim();
  return {
    json: {
      ...item.json,
      cleanName,
      amountNumber: valid ? amount : null,
      needsReview: !valid || cleanName.length === 0
    },
    pairedItem: { item: index }
  };
});

원래 amount를 그대로 남기고 amountNumber를 추가하므로, 변환이 실패해도 원본을 비교할 수 있습니다. null은 정상 숫자가 아님을 나타냅니다. pairedItem은 이 단일 입력의 새 출력이 어떤 입력 아이템에서 왔는지 연결합니다. 이 예제에는 파일이 없으며, 파일을 함께 변환한다면 binary 보존도 별도로 고려해야 합니다.

3. 예상 결과와 잘못된 변환 비교

id원본 amountamountNumberneedsReview
A101문자열 12,00012000false
A102빈 문자열nulltrue
A103문자열 1,2nulltrue
A104숫자 00false

Number(”)는 0이므로 무조건 Number()를 적용하면 빈 금액을 실제 0원으로 잘못 처리할 수 있습니다. 쉼표를 전부 지우는 방식도 먼저 형식을 검사해야 합니다. 정리 후에는 IF 노드의 Boolean 조건으로 needsReview가 true인 건을 확인 목록에 보내세요.

코드가 열린 개발용 모니터
코드가 열린 개발용 모니터. 자동화·개발 작업 환경을 보여주는 참고 사진이며 실제 n8n 실행 화면은 아닙니다. 사진: Mohammad Rahmani / Unsplash

4. 합계가 필요하면 검토 대상부터 분리

IF의 false 출력에 Code 노드를 연결하고 Run Once for All Items에서 아래처럼 합계를 구할 수 있습니다. 검토 대상과 정상 데이터가 섞인 상태에서는 실행하지 않습니다.

const items = $input.all();
const total = items.reduce((sum, item) => sum + item.json.amountNumber, 0);
return [{ json: { count: items.length, total } }];

예제의 정상 데이터는 A101과 A104이므로 count는 2, total은 12000입니다. 이 단계는 여러 아이템을 요약 1개로 바꿉니다. 따라서 후속 단계에서 특정 신청자 한 명의 .item 참조를 기대하지 말고, 요약용 필드를 사용하세요. 정상 데이터가 0개이면 앞 분기에서 이 노드 자체가 실행되지 않을 수 있습니다.

여러 화면을 사용하며 개발 작업을 하는 사람
여러 화면을 사용하며 개발 작업을 하는 사람. 자동화·개발 작업 환경을 보여주는 참고 사진이며 실제 n8n 실행 화면은 아닙니다. 사진: Mohammad Rahmani / Unsplash

5. 적용 전 추가로 시험할 입력

  • amount가 null 또는 없는 경우: 확인 대상으로 남는지 확인합니다.
  • amount가 ‘ 1,000 ‘인 경우: 1000으로 변환되는지 확인합니다.
  • amount가 ’12원’, ‘-5’, ‘1.5’인 경우: 이 실습 규칙에서는 거부되어야 합니다.
  • name이 공백뿐인 경우: 금액이 정상이더라도 확인 대상으로 분류되어야 합니다.

실제 업무에서 환불·외화·소수 금액을 다룬다면 이 코드를 그대로 사용하지 말고 허용 범위와 반올림 규칙부터 바꾸세요. 예제는 입력 표준화 학습을 위한 것이며 모든 금액 형식을 처리하는 범용 파서는 아닙니다.

함께 읽을 실습

n8n 아이템이란? JSON 배열과 여러 아이템의 차이
n8n 표현식: $json·item·first·all 참조 차이와 예제