Json To Csv LogoJson To Csv

what is JSON to CSV converter online? 다섯 단계로 뜯어보는 온라인 변환기의 구조 (2026 가이드)

온라인 JSON to CSV 변환기는 JSON 데이터를 CSV 파일로 바꾸는 웹 페이지입니다. 버튼 아래에는 파서, 행 탐색기, 평탄화 도구, 인용 부호 처리 엔진, 다운로드 단계까지 다섯 개의 작은 기계가 일렬로 연결되어 있습니다. 이 가이드는 각 단계가 데이터에 실제로 어떤 일을 하는지 실제 변환기로 검증한 출력과 함께 보여 주고, 페이지 옵션이 어디에 연결되는지 설명합니다.

업데이트: 2026-10-249 분 소요

what is JSON to CSV converter online? 다섯 개의 부품이지 하나가 아닙니다

JSON을 변환기에 붙여 넣으면 CSV가 나오는 과정은 한 번의 동작처럼 느껴지지만 실제로는 그렇지 않습니다. 모든 온라인 JSON to CSV 변환기는 이 페이지를 포함해 같은 순서로 같은 다섯 단계를 실행합니다. 파싱, 행 찾기, 평탄화, 직렬화, 다운로드입니다. 각 단계가 어떤 일을 하는지 알면 모든 오류 메시지와 낯선 셀을 읽는 눈이 달라집니다. 모든 종류의 문제는 정확히 하나의 단계에 속하기 때문입니다. 위치를 가리키는 오류는 파서의 일이고, 기대보다 행이 적으면 행 탐색기의 일입니다. 단계를 알면 막연한 불안이 구체적인 진단으로 바뀝니다. 실제로 이 다섯 단계는 코드에서도 별개의 모듈로 존재합니다. 파싱 라이브러리, 행 추출 로직, 재귀 평탄화 함수, CSV 직렬화기, 파일 다운로드 함수가 따로 놀기 때문에, 증상을 단계에 연결하는 것은 디버깅과 정확히 같은 사고방식입니다. 위치 오류가 나면 파서를, 표 모양이 이상하면 평탄화와 직렬화기를 보면 됩니다.

파이프라인이 중요한 두 번째 이유는 페이지의 옵션이 마법 같은 설정이 아니기 때문입니다. 모든 토글과 드롭다운은 특정 단계 하나에만 연결되어 있습니다. 중첩 값 평탄화 토글은 3단계를 제어하고, 구분자 선택은 4단계를 제어합니다. 이 연결이 보이기 시작하면 옵션은 찍기가 아니라 판단이 됩니다. 무엇을 켜야 하고 무엇을 그대로 두어야 할지가 분명해집니다. 예를 들어 받는 쪽이 중첩 JSON을 직접 읽는 시스템이라면 평탄화를 끄는 것이 정답이고, 엑셀로 여는 것이 목적이라면 구분자를 세미콜론으로 바꾸는 것이 정답입니다. 같은 증상도 목적에 따라 다른 단계에서 해결됩니다.

이 가이드는 같은 작은 주문 기록을 예제로 삼아 다섯 단계를 순서대로 살펴봅니다. 보여 드리는 모든 출력은 이 페이지의 실제 변환기가 만든 결과로, 그림이나 가상이 아닙니다. 글을 끝까지 읽으면 변환기가 내부에서 무엇을 하는지, 옵션이 어디에 꽂히는지, 문제가 생겼을 때 어디를 먼저 봐야 하는지 알게 됩니다.

1단계: 파서, 문을 지키는 경비원

1단계는 붙여 넣은 내용을 읽고 그것이 JSON인지 아닌지를 판단합니다. 파이프라인에서 가장 엄격하고 가장 용서 없는 기계입니다. 따옴표 하나가 빠지거나, 쉼표가 하나 더 있거나, 엉뚱한 문자가 하나라도 섞인 JSON은 이 단계에서 바로 거부됩니다. 다른 단계는 실행조차 되지 않습니다. 이것은 결함이 아니라 설계입니다. 깨진 입력을 대충 받아들이는 변환기는 조용히 틀린 표를 만들어 냅니다. 파서가 허용하는 것과 거부하는 것의 경계도 분명합니다. 앞뒤 공백이나 줄바꿈, 들여쓰기는 무시됩니다. 구조를 바꾸는 것은 절대 용서되지 않습니다. 따옴표 없는 키, 작은따옴표로 감싼 문자열, 뒤에 남는 쉼표는 모두 거부 사유입니다. 관대해 보이는 파서는 조용한 오류를 만들어 내므로, 엄격함이 곧 정확성입니다.

파서가 입력을 거부하면 멈춘 위치를 알려 주는데, 실제 실수는 대개 그 지점에서 한두 문자 안에 있습니다. 가장 흔한 거부는 두 가지, 빈 입력란과 잘못된 JSON이며, 메시지는 알아보기 쉽게 나옵니다:

What the parser reports
Input: (empty box)
Output: Input is empty. Please paste or upload JSON data.

이 단계에서는 데이터가 전혀 바뀌지 않습니다. 파서는 JSON을 받아들이고 구조화된 값을 2단계에 넘기거나, 오류와 함께 파이프라인 전체를 멈춥니다. 깨진 입력으로 표를 만들어 내는 변환기를 본다면 그 변환기는 검증을 건너뛴 것이니 결과를 신뢰하지 마세요.

2단계: 행 탐색기, 행은 어디서 오는가

2단계는 파싱된 JSON을 살펴보며 하나의 질문에 답합니다. 무엇을 행으로 만들 것인가. CSV는 행의 목록이므로 변환기는 데이터 어딘가에서 목록을 찾아야 합니다. 가장 쉬운 경우는 최상위 배열이 객체들의 목록인 경우로, 각 객체가 그대로 한 행이 됩니다. 끝입니다.

현실의 데이터는 그렇게 깔끔하지 않습니다. API는 목록을 감싸서 돌려주는 것을 좋아합니다. {"users": [...], "total": 2} 같은 형태죠. 똑똑한 행 탐색기는 감싼 목록을 찾아 행으로 삼고, 감싸는 필드는 무시합니다. 목록이 없는 단일 객체는 정확히 한 행이 됩니다. 줄 단위 JSON, 즉 한 줄에 하나의 객체가 있는 형식은 한 줄이 한 행으로 읽힙니다. {"data": [...], "page": 1, "per_page": 20}처럼 페이지 정보가 딸린 형태도 흔하고, {"results": {"items": [...]}}처럼 두 겹으로 감싼 경우도 있습니다. 좋은 행 탐색기는 이런 변형을 알아보고 가장 그럴듯한 목록을 행으로 삼습니다. 어떤 목록을 골랐는지 확신이 서지 않으면, 출력의 행 수와 열 이름을 보고 역추적하면 됩니다.

Input: a wrapped list, as APIs return it
{"users": [{"name": "Amelia", "city": "Austin"}, {"name": "Bruno", "city": "Berlin"}], "total": 2}

행 탐색기는 users 목록을 꺼내 name과 city 열로 이루어진 두 행을 만듭니다. total 필드는 행도 아니고 열도 아니므로 버려집니다. 기대보다 행이 적거나 열이 사라졌다면 이 단계를 의심하세요. 변환기가 여러분이 의도한 목록이 아닌 다른 목록을 찾은 것입니다.

3단계: 평탄화 도구, 데이터를 실제로 바꾸는 유일한 단계

3단계는 데이터의 모양을 바꾸는 유일한 단계입니다. CSV 셀에는 객체나 목록을 담을 수 없으므로, 중첩된 값은 표에 들어가기 전에 다시 써야 합니다. 평탄화 도구는 고정된 규칙으로 모든 중첩 값을 최상위로 끌어올립니다. 중첩 객체는 점 표기법 열이 되고, 짧은 일반 값 목록은 값을 이어 붙인 하나의 셀이 되며, 객체들의 목록은 인용 부호로 감싼 JSON 텍스트 셀이 됩니다. [{"sku": "x1"}, {"sku": "x2"}] 같은 값은 셀로 펼 수 없어서 JSON 텍스트 그대로 하나의 셀에 들어가고, 인용 부호로 감쌉니다. 받는 쪽에서 다시 파싱할 수 있게 원본을 보존하는 선택입니다.

이 가이드에서 사용하는 입력 기록은 다음과 같습니다. 중첩된 customer 객체, tags 목록, 쉼표를 포함한 note가 들어 있습니다:

Input JSON (nested)
[{"id": "A-101", "customer": {"name": "Amelia", "city": "Austin"}, "tags": ["new", "vip"], "note": "ships, fast"}]

3단계: 평탄화 도구, 데이터를 실제로 바꾸는 유일한 단계 (계속)

그리고 평탄화 도구가 다음 단계에 넘기는 결과입니다. 실제 변환기로 검증했습니다:

Flattened output (verified against the real engine)
id,customer.name,customer.city,tags,note
A-101,Amelia,Austin,new; vip,"ships, fast"

열 하나씩 읽어 보세요. customer 객체는 customer.name과 customer.city 두 열이 되었습니다. tags 목록은 하나의 셀이 되어 new; vip처럼 값이 세미콜론과 공백으로 이어졌습니다. note의 쉼표는 그대로 남았고, 이것은 4단계가 처리합니다. null 값과 빈 목록은 빈 셀이 됩니다. 새로 만든 것도 없고 지운 것도 없지만, 트리가 표가 되었습니다. 평탄화 토글을 끄면 3단계가 통째로 건너뛰어집니다. 중첩 값은 JSON 텍스트 그대로 셀 안에 남아 표가 깨지지 않도록 인용 부호로 감쌉니다. 받는 시스템이 JSON을 다시 꺼내 읽는다면 이것이 맞을 수도 있고, 그렇지 않다면 엉망이 됩니다. 어느 쪽이든 이 단계가 하는 일입니다.

4단계: 직렬화 도구, 인용 부호 처리 엔진

4단계는 평탄화된 행을 CSV 텍스트로 바꾸며, 유일한 임무는 표를 유효하게 유지하는 것입니다. 따르는 규칙은 단순합니다. 구분자, 인용 부호 문자, 줄바꿈 중 하나라도 포함된 셀은 큰따옴표로 감싸고, 안에 있는 인용 부호는 두 개로 겹쳐 씁니다. 나머지는 있는 그대로 씁니다. 셀 안에 큰따옴표가 있으면 그 인용 부호를 두 개로 겹쳐 쓰고 전체를 감쌉니다. He said "hi"라는 값은 "He said ""hi"""가 됩니다. 이 규칙은 RFC 4180이 정한 CSV의 표준 동작이며, 엑셀과 구글 시트가 모두 같은 방식으로 읽습니다.

미묘한 점은 인용 부호 처리가 고정된 기준이 아니라 사용 중인 구분자를 따른다는 것입니다. 같은 기록을 세미콜론 구분자로 직렬화한 결과를 보세요. 실제 변환기로 검증했습니다:

Semicolon output (verified against the real engine)
id;customer.name;customer.city;tags;note
A-101;Amelia;Austin;"new; vip";ships, fast

tags 셀은 이제 감싸져 있습니다. new; vip에 세미콜론이 들어 있기 때문입니다. 하지만 note의 ships, fast는 그대로입니다. 구분자가 세미콜론일 때 쉼표는 평범한 문자라 보호가 필요 없습니다. 엔진은 실제 사용 중인 구분자에 맞춰 인용합니다. 잘 만든 CSV가 엑셀에서 한 열로 열리는 이유도 여기에 있습니다. 엑셀이 직렬화 도구가 쓴 구분자와 다른 구분자로 나눈 것, 즉 4단계의 불일치지 데이터가 깨진 것이 아닙니다. 같은 이유로 독일이나 프랑스처럼 시스템 목록 구분자가 세미콜론인 지역에서는 쉼표 구분 CSV가 한 열로 열리는 일이 흔합니다. 반대로 미국 설정의 엑셀에서 세미콜론 CSV를 열면 한 열로 보입니다. 파일이 아니라 여는 쪽의 설정 문제이니, 가져오기 마법사에서 구분자를 직접 지정하면 해결됩니다.

4단계: 직렬화 도구, 인용 부호 처리 엔진 (계속)

사람들을 놀라게 하는 구분자가 하나 더 있습니다. 탭입니다. 실제 데이터에 탭이 들어 있는 일은 거의 없으므로, 탭 구분 출력은 보통 인용 부호가 전혀 필요 없습니다:

Tab output (verified against the real engine)
id	customer.name	customer.city	tags	note
A-101	Amelia	Austin	new; vip	ships, fast

어디에도 인용 부호가 없습니다. 헤더 포함 토글도 4단계의 옵션입니다. 열 이름을 첫 행으로 쓸지 말지만 정하고, 다른 것은 아무것도 바꾸지 않습니다. 여러 CSV를 하나로 합칠 때는 헤더를 끈 뒤 이어 붙이면 열 이름이 중간에 끼는 일을 막을 수 있습니다. 반대로 처음 만드는 파일에는 헤더를 켜 두는 것이 좋습니다. 열 이름이 있어야 나중에 어떤 열인지 알 수 있기 때문입니다.

5단계: 다운로드, 평범한 UTF-8과 파일 이름

5단계는 가장 심심하고 가장 실수하기 쉬운 단계입니다. 완성된 텍스트를 파일로 건네는 일만 합니다. 이 페이지는 반복 다운로드가 날짜순으로 정렬되도록 data-export-YYYY-MM-DD.csv라는 이름을 붙이고, 바이트 순서 표시 없이 평범한 UTF-8로 씁니다. 날짜를 YYYY-MM-DD 형태로 파일 이름에 넣는 이유는 정렬 때문입니다. 파일 탐색기에서 이름순으로 정렬하면 자연스럽게 날짜순이 됩니다. BOM 없이 UTF-8로 쓰는 선택도 같은 맥락입니다. 가장 호환성이 넓은 형태를 기본값으로 두는 것입니다.

BOM 없음은 알아둘 가치가 있습니다. 엑셀에서 물리기 때문입니다. 일부 프로그램은 BOM으로 UTF-8을 감지하는데, BOM이 없으면 파일을 더블클릭했을 때 악센트 문자가 깨져 보일 수 있습니다. 고치는 쪽은 여는 쪽이지 파일이 아닙니다. 엑셀에서는 텍스트 가져오기로 파일을 열고 65001: 유니코드 (UTF-8) 인코딩을 선택하세요. 파일 자체에는 문제가 없습니다. 한국판 엑셀에서는 데이터 탭의 텍스트 나누기나 외부 데이터 가져오기로 파일을 열고, 원본 파일 형식을 65001: 유니코드 (UTF-8)로 지정하면 됩니다. 한 번 가져오기 설정을 저장해 두면 다음부터는 같은 과정을 반복하지 않아도 됩니다.

페이지 옵션은 어디에 연결되는가

다섯 단계를 알면 변환기 옵션은 배선도처럼 읽힙니다. 중첩 값 평탄화 토글은 3단계를 켜고 끕니다. 구분자 선택, 쉼표, 세미콜론, 탭, 파이프는 4단계가 인용 부호를 감쌀 기준 문자를 정합니다. 헤더 행 포함 토글은 4단계에서 열 이름 행을 넣거나 뺍니다. 자동 변환은 버튼을 기다리지 않고 키 입력마다 파이프라인 전체를 다시 실행할 뿐입니다. 자동 변환은 타이핑할 때마다 전체 파이프라인을 다시 돌리므로, 매우 큰 JSON에서는 잠깐의 지연이 생길 수 있습니다. 이럴 때는 자동 변환을 끄고 버튼으로 수동 실행하는 것이 낫습니다. 옵션 하나하나가 어느 단계를 건드리는지 알면 이런 판단이 쉬워집니다.

파서에 닿는 옵션은 없습니다. 의도적인 설계입니다. 검증은 취향의 문제가 아니기 때문입니다. 1단계를 끌 수 있는 변환기는 깨진 입력으로 자신감 넘치는 쓰레기를 만들어 냅니다.

결과가 이상하면 정확히 하나의 부품을 의심하세요

파이프라인을 아는 목적은 진단입니다. 증상을 단계에 맞춰 보면 어디를 봐야 할지 알 수 있습니다:

  • 위치를 가리키는 오류 메시지: 1단계, 파서입니다. 표시된 지점 근처에서 JSON이 잘못되었습니다. JSON을 검사하고 원본을 고치세요.
  • 행이 적거나 열이 사라짐: 2단계, 행 탐색기입니다. 변환기가 의도한 목록이 아닌 다른 목록을 골랐거나, 감싸는 형태에 혼동했습니다.
  • 셀 안에 읽을 수 없는 JSON 텍스트: 3단계, 평탄화 도구가 꺼져 있거나 데이터가 너무 깊습니다. 평탄화를 켜세요.
  • 열었을 때 전부 한 열로 들어감: 4단계, 직렬화 도구가 스프레드시트가 기대하는 구분자와 다른 구분자를 썼습니다. 맞는 구분자로 다시 가져오거나, 세미콜론이나 탭으로 다시 만드세요.
  • 엉뚱한 인용 부호나 갈라진 행: 4단계 인용 부호 처리 문제로, 보통 quoteMode never 옵션 때문이거나 손으로 고친 CSV 때문입니다. 인용 부호는 자동으로 두세요.
  • 열었을 때 이상한 문자: 5단계, 다운로드 인코딩입니다. 더블클릭 대신 UTF-8 (65001)로 다시 가져오세요.

온라인 JSON to CSV 변환기가 아닌 것들

파이프라인은 경계도 정해 줍니다. 변환기는 JSON 편집기가 아닙니다. 데이터를 고치거나, 필드 이름을 바꾸거나, 열의 의미를 정할 수 없습니다. JSON 포매터도 아닙니다. 파서가 부수 효과로 검증하기는 하지만, 예쁘게 들여쓴 JSON이 필요하면 다른 도구를 찾으세요. 스프레드시트도 아닙니다. CSV를 다운로드한 뒤의 정렬, 필터, 수식은 엑셀이나 시트에서 하는 일이지 변환기에서 하는 일이 아닙니다. 변환기는 데이터를 정리해 주지도 않습니다. 중복 행을 지우거나, 빈 행을 채우거나, 정렬 순서를 바꾸는 일은 하지 않습니다. 입력된 행이 그대로 출력됩니다. 정리가 필요하면 CSV를 만든 뒤 스프레드시트에서 하는 것이 맞습니다.

데이터의 의미를 바꿀 수도 없습니다. 평탄화는 값은 살리지만 타입을 무너뜨립니다. 숫자, 불리언, null은 모두 텍스트가 되고, 중첩 구조는 열 이름이 되며, CSV만으로 원래 트리로 돌아갈 방법은 없습니다. 행마다 모양이 다르면 변환기는 모든 열의 합집합을 취하고, 없는 필드에는 빈칸을 둡니다. 정직한 동작이지만 변환 전에 알아둘 가치가 있습니다. 변환기는 데이터를 충실히 재배열할 뿐이고, 충실함이 전부입니다. 예를 들어 true는 문자열 "true"가 되고, 2026-10-24 같은 날짜 문자열은 날짜가 아니라 텍스트로 취급됩니다. 엑셀에서 날짜로 인식되기를 바란다면 가져오기 단계에서 열 형식을 지정해야 합니다. 변환기는 값을 있는 그대로 옮길 뿐, 의미를 해석하지 않습니다.

관련 가이드

자주 묻는 질문

온라인 JSON to CSV 변환기를 한 문장으로 말하면?

JSON 데이터를 다섯 단계, 파서, 행 탐색기, 평탄화 도구, 인용 부호 처리 엔진, 다운로드로 CSV 파일로 바꾸는 웹 페이지이며, 파이프라인 전체가 브라우저 탭 안에서 실행됩니다.

JSON to CSV 변환기의 다섯 부품은 무엇인가요?

JSON을 검증하는 파서, 무엇이 행이 될지 정하는 행 탐색기, 중첩 값을 평범한 셀로 펼치는 평탄화 도구, 올바른 인용 부호로 유효한 CSV 텍스트를 쓰는 직렬화 도구, 파일을 건네는 다운로드 단계입니다. 페이지 옵션은 가운데 세 단계에 연결됩니다. 파서는 입구에서 유효성을 검사하고, 행 탐색기는 표의 뼈대를 잡고, 평탄화 도구는 모양을 바꾸고, 직렬화 도구는 텍스트로 쓰고, 다운로드는 파일로 건넵니다. 옵션이 닿는 것은 행 탐색기부터 직렬화 도구까지의 가운데 세 단계입니다.

왜 어떤 셀은 인용 부호로 감싸고 어떤 셀은 그대로 두나요?

인용 부호 처리는 사용 중인 구분자를 따릅니다. 셀에 활성 구분자, 인용 부호 문자, 줄바꿈 중 하나가 들어 있을 때만 큰따옴표로 감싸고, 안의 인용 부호는 두 개로 겹쳐 씁니다. 구분자를 바꾸면 다른 셀이 감싸지는데, 이것은 올바른 동작이지 일관성 없는 동작이 아닙니다.

변환 결과가 엑셀에서 한 열로 열리는 이유는?

4단계 직렬화 단계의 구분자 불일치이지 데이터가 깨진 것이 아닙니다. 엑셀은 시스템 목록 구분자로 열을 나누는데, 지역에 따라 쉼표인 곳도 있고 세미콜론인 곳도 있습니다. 맞는 구분자로 다시 가져오거나, 세미콜론이나 탭 옵션으로 CSV를 다시 만드세요. 가져오기 마법사에서 구분자를 직접 고르면 바로 해결됩니다. 미리 구분자를 알고 싶다면 메모장으로 CSV를 열어 첫 줄을 보면 됩니다. 셀 사이에 있는 문자가 그 파일의 구분자입니다.

JSON to CSV 변환기는 JSON 포매터와 같은가요?

다릅니다. 포매터는 사람이 읽기 좋게 JSON을 예쁘게 출력하고, 변환기는 스프레드시트가 열 수 있도록 JSON을 표로 재구성합니다. 변환기 파서가 부수 효과로 JSON을 검증하기 때문에 잘못된 입력에는 표 대신 오류가 나옵니다. 하지만 포매팅은 변환기의 일이 아닙니다.

변환기가 깨진 JSON을 고쳐 줄 수 있나요?

없으며, 고쳐 주려는 변환기는 의심해야 합니다. 파서 단계는 잘못된 JSON을 멈춘 위치를 가리키는 오류와 함께 거부합니다. 원본에서 JSON을 고치세요. 표시된 위치 근처의 빠진 따옴표나 뒤에 남은 쉼표를 찾은 뒤 다시 변환하세요. 온라인 JSON 검사기에 붙여 넣어 위치를 확인하는 것도 좋은 방법입니다.

변환기가 데이터를 바꾸나요, 형식만 바꾸나요?

값은 유지되지만 모양은 바뀝니다. 평탄화는 중첩 객체를 점 표기법 열로, 목록을 이어 붙인 셀로 바꾸고, 모든 값은 텍스트가 됩니다. 숫자, 불리언, null은 타입을 잃습니다. 모양이 다른 행들은 모든 열의 합집합을 얻고, 없는 필드 자리에는 빈칸이 들어갑니다. 따라서 CSV를 다시 JSON으로 되돌리는 일은 원래 구조를 복원하지 못합니다. 점 표기법 열을 중첩 객체로 되돌리는 것은 가능하지만, 타입 정보는 이미 사라졌습니다. 변환 전에 이 점을 알고 있으면 나중에 당황하지 않습니다.

다섯 단계를 직접 확인해 보세요

이 페이지의 변환기에 어떤 JSON이든 붙여 넣고 파서, 평탄화 도구, 인용 부호 처리기가 일하는 모습을 지켜보세요. 무료이며, 회원 가입 없이, 브라우저 안에서 전부 실행됩니다.

JSON to CSV 변환기 열기
모든 가이드