MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

JSON을 CSV로 변환

JSON 레코드 배열을 헤더 한 줄과 점 표기 열 이름을 갖춘 CSV 파일로 바꿔 주며, 따옴표는 꼭 필요한 칸에만 붙입니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

예제

옵션

줄 끝

=, +, -, @로 시작하는 텍스트 앞에 '를 붙여 Excel·Sheets가 수식으로 실행하지 않게 합니다.

내려받는 파일에만 BOM을 붙여 엑셀에서 한글 등 non-ASCII 글자가 깨지지 않게 합니다. 복사한 텍스트에는 영향이 없습니다.

배열

JSON 입력

23줄344byte

결과

⌘/Ctrl + Enter로 복사
결과 · data.csv
id,name,email,active,score

1,Ada Lovelace,ada@example.com,true,98.5

2,Grace Hopper,grace@example.com,false,91

3,Linus,,true,87.25

행3
열5
크기134byte

JSON CSV 변환기는 객체 배열(또는 객체 하나)을 받아 스프레드시트에 바로 열 수 있는 표로 만들어 줍니다. 객체 하나가 행 하나가 되고, 헤더는 모든 레코드에서 나온 키의 합집합입니다. 레코드마다 키가 달라도 열이 맞춰지고 없는 칸은 비워 둡니다. [1,"two"]처럼 값만 담긴 배열은 value라는 열 하나가 됩니다.

중첩 객체는 address.city처럼 점으로 이어진 열 이름으로 펼쳐집니다. 배열은 한 칸에 압축된 JSON 문자열로 넣거나, 배열 옵션으로 인덱스마다 열을 나눌 수 있습니다(tags.0, tags.1). 어느 쪽이든 행 수는 레코드 수와 같게 유지되므로 엑셀·구글 시트·DB 가져오기에 넣기 전 단계로 쓰기 좋습니다.

따옴표는 필요한 칸에만 붙고, 스프레드시트가 수식으로 실행할 수 있는 텍스트는 기본으로 무력화합니다. 200,000자를 넘는 입력은 Web Worker에서 처리하고 1,000,000자를 넘으면 편집기에서 원문을 숨기되 전체를 변환합니다. 한도는 20 MiB, 50,000행, 200열입니다.

사용 방법

  1. JSON 붙여넣기 또는 불러오기

    API 목록 응답 같은 객체 배열을 붙여넣거나 JSON 파일을 선택합니다. 객체 하나도 받으며 한 행이 됩니다. 샘플 메뉴에서 API 응답, 중첩 배열, 경계 사례를 불러볼 수 있습니다.

  2. 구분자와 줄 끝 선택

    쉼표, 세미콜론, 탭, 파이프 중에서 고릅니다. 소수점을 쉼표로 쓰는 로캘의 스프레드시트에는 세미콜론, TSV가 필요하면 탭을 씁니다. 탭 구분 다운로드 파일명은 data.tsv입니다. 줄 끝은 기본이 CRLF이고 유닉스 도구용으로 LF도 고를 수 있습니다.

  3. 헤더·배열·수식 옵션 정하기

    기존 파일에 이어 붙일 때는 헤더 행 스위치를 꺼서 첫 줄을 뺍니다. 배열은 한 칸의 JSON 문자열로 두거나 인덱스별 열로 나눌 수 있고, 수식 무력화는 기본으로 켜져 있습니다.

  4. 알림 확인

    결과 아래의 알림에서 같은 이름의 열이 합쳐졌는지, 앞에 작은따옴표가 붙은 텍스트 칸이 몇 개인지 알려 줍니다. 목록이 비었거나 키가 하나도 없는 원소만 있거나 행·열이 한도를 넘으면 오류가 납니다.

  5. 복사 또는 저장

    CSV를 복사하거나 파일로 저장해 스프레드시트나 가져오기 도구에서 엽니다.

작동 원리

레코드와 열이 만들어지는 방식

입력은 배열이거나 객체 하나입니다. 원소는 각각 따로 펼쳐지고, 헤더는 처음 등장한 순서대로 모든 키를 합친 목록입니다. 최상위 원소가 단순 값이면 value 열에 들어가고, 배열 원소는 거기에 JSON 문자열로 적힙니다.

펼치기는 키를 점으로 이어 붙이며 객체 안으로 내려갑니다. 배열 옵션이 기본(JSON 문자열)이면 배열은 말단이고, 인덱스별 열을 고르면 {"tags":["a","b"]}가 tags.0, tags.1이 되며 빈 배열은 []로 남습니다. {"a.b":1,"a":{"b":2}}처럼 두 경로가 같은 열 이름을 만들면 첫 번째 값을 남기고, 알림에 그 열 이름을 알려 줍니다.

JSON 값CSV 칸
문자열 AdaAda
숫자 1.51.5
true / falsetrue / false
null(빈 칸)
배열 ["a","b"]JSON 문자열 ["a","b"] 또는 tags.0, tags.1 열
빈 중첩 객체 {}{}
레코드에 없는 키(빈 칸)

따옴표와 줄 끝 처리

칸 안에 구분자, 큰따옴표, 줄바꿈이 있거나 앞뒤에 공백이 있을 때만 큰따옴표로 감싸고, 안쪽 큰따옴표는 두 번 겹쳐 씁니다. RFC 4180이 정한 방식입니다. 나머지는 따옴표 없이 쓰므로 숫자와 일반 단어가 그대로 읽힙니다. 줄 끝은 RFC 4180대로 CRLF이며 LF를 고를 수도 있고, 파일 끝에도 줄 끝이 붙습니다.

무엇이 특수한지는 구분자에 따라 달라집니다. 세미콜론 파일에서는 쉼표가 평범한 문자라서 따옴표 없이 그대로 나옵니다.

id,name,address.city
1,"Ada, L.",Seoul

수식 무력화

엑셀·LibreOffice·구글 시트는 칸의 텍스트가 =, +, -, @로 시작하면 수식으로 실행할 수 있습니다. 수식 무력화를 켜면 이런 문자로 시작하는 텍스트 칸마다 앞에 '를 붙입니다. 이 작은따옴표는 CSV 데이터이므로 파일을 열면 보이며, 엑셀 셀에 직접 입력할 때 쓰는 숨은 표식이 아닙니다. JSON 숫자는 건드리지 않아 -5는 숫자로 남고, 바뀐 칸의 수는 알림으로 알려 줍니다.

실제 예시

중첩 객체, 배열, null, 키가 다른 레코드
입력
[{"id":1,"name":"Ada, L.","address":{"city":"Seoul","zip":"04524"},"tags":["a","b"],"note":null},{"id":2,"name":"Bo \"B\"","extra":true}]
출력
id,name,address.city,address.zip,tags,note,extra
1,"Ada, L.",Seoul,04524,"[""a"",""b""]",,
2,"Bo ""B""",,,,,true

중첩 키는 점으로 이어진 헤더가 되고, 배열은 JSON 문자열 한 칸에 들어가며, null은 빈 칸이 됩니다. 두 번째 레코드에만 있는 열은 맨 끝에 추가됩니다. 쉼표나 따옴표가 든 칸만 따옴표로 감싸집니다.

수식은 무력화하고 숫자는 그대로 둡니다
입력
[{"item":"=1+1","qty":-5,"phone":"+82-10-1234-5678","ok":"fine"}]
출력
item,qty,phone,ok
'=1+1,-5,'+82-10-1234-5678,fine

=나 +로 시작하는 텍스트 두 칸에는 작은따옴표가 붙고, 알림이 그 개수를 알려 줍니다. -5는 텍스트가 아니라 JSON 숫자이므로 그대로입니다.

객체 하나를 세미콜론 구분자로 변환
입력
{"a":1.5,"b":{"c":{}},"s":"x;y"}
출력
a;b.c;s
1.5;{};"x;y"

최상위 객체는 레코드 하나로 취급됩니다. 비어 있는 중첩 객체는 해당 열에 {}로 기록되고, 세미콜론이 든 칸만 따옴표로 감싸집니다.

배열 인덱스마다 열 나누기
입력
[{"id":1,"tags":["a","b"]},{"id":2,"tags":["c"]}]
출력
id,tags.0,tags.1
1,a,b
2,c,

배열 옵션을 인덱스별 열로 두면 열이 tags.0, tags.1이 되고, 더 짧은 배열은 두 번째 칸이 빕니다.

열 이름 충돌
입력
[{"a.b":1,"a":{"b":2}}]
출력
a.b
1

두 경로가 모두 a.b 열을 만들기 때문에 첫 번째 값을 남기고, 변환을 멈추는 대신 알림이 열 이름을 알려 줍니다.

자주 하는 실수

  • 열 이름은 키에서 나옵니다

    {"a.b":1,"a":{"b":2}}는 경로 a.b를 두 번 만듭니다. 첫 번째 값이 남고 두 번째는 버려지며 결과 아래에 알림이 뜨므로, 둘 다 필요하면 키 이름을 바꾸세요. [{}]처럼 키가 하나도 없는 목록은 열이 없어 오류가 나고, 다른 레코드 옆의 빈 객체는 빈 칸으로 된 행이 됩니다.

  • 앞의 작은따옴표도 CSV 데이터입니다

    수식 무력화는 -x, +82-10-1234-5678, =B2 같은 문자열 앞에 '를 붙입니다. CSV를 엑셀로 열어도 이 작은따옴표가 보이고, 스크립트나 DB 가져오기도 값의 일부로 읽습니다. 엑셀 셀에 작은따옴표를 직접 입력할 때 적용되는 숨은 표식과는 다릅니다.

  • 배열은 행으로 펼쳐지지 않습니다

    주문마다 들어 있는 품목 목록은 JSON 문자열 한 칸이 되거나 번호 붙은 열이 됩니다. 품목마다 행이 필요하면 품목이 최상위 배열이 되도록 JSON 구조를 먼저 바꾸세요.

  • 형식과 열 구분은 엑셀이 가져올 때 정합니다

    04524 같은 우편번호는 파일에는 그대로 있지만 엑셀이 열을 숫자로 바꾸면 0이 사라지므로, 그 열은 텍스트로 가져오세요. 로캘에 따라 엑셀은 쉼표 대신 세미콜론을 기대하기도 합니다. 한 줄 전체가 한 열에 몰리면 다른 구분자나 탭으로 다시 내보내세요.

  • 큰 숫자는 CSV가 만들어지기 전에 반올림됩니다

    JSON 숫자는 64비트 부동소수점으로 읽히므로 12345678901234567890처럼 9007199254740991을 넘는 정수는 자릿수를 잃습니다. 도구가 결과 아래에 처음 영향받은 값을 알려 줍니다. 이런 ID는 원본 JSON에서 따옴표로 감싸 두면 그대로 통과합니다.

  • 한글과 악센트는 엑셀에서 BOM이 필요합니다

    BOM이 없는 UTF-8 CSV는 엑셀이 시스템 코드 페이지로 읽어 글자가 깨져 보입니다. 엑셀 호환 (UTF-8 BOM)은 기본으로 켜져 있으며 내려받는 파일에만 BOM을 붙입니다. 첫 헤더 이름을 그대로 읽는 스크립트나 DB용이라면 끄세요.

자주 묻는 질문

JSON 객체 하나도 변환되나요?

네. 최상위 객체는 레코드가 하나인 배열로 취급되어 헤더 한 줄과 데이터 한 줄이 만들어집니다.

모든 값에 따옴표가 붙나요?

아니요. 구분자, 큰따옴표, 줄바꿈이 있거나 앞뒤에 공백이 있는 칸에만 붙습니다. 숫자와 일반 단어는 따옴표 없이 쓰이며, 이것도 올바른 RFC 4180 CSV입니다.

중첩 객체는 어떻게 표시되나요?

키를 점으로 이어서 {"address":{"city":"Seoul"}}가 address.city 열이 됩니다.

null이나 값만 담긴 배열은 어떻게 되나요?

null은 빈 칸이 되며 레코드에 키가 없는 경우와 같습니다. [1,"two",null] 같은 배열은 value라는 열 하나가 됩니다.

구분자와 줄 끝은 무엇을 고를 수 있나요?

쉼표, 세미콜론, 탭, 파이프 중 하나와 CRLF 또는 LF를 고를 수 있고 헤더 행도 끌 수 있습니다. 따옴표 처리는 고른 구분자를 따릅니다.

수식 무력화는 무엇을 바꾸나요?

=, +, -, @, 탭, 캐리지 리턴으로 시작하는 텍스트 칸 앞에 '를 붙입니다. JSON 숫자는 바뀌지 않고, 영향받은 칸의 수는 알림으로 알려 줍니다.

크기 제한이 있나요?

입력은 20 MiB, 행은 50,000개, 열은 200개까지입니다. 더 큰 파일은 나누거나 명령줄 도구로 처리하세요.

데이터가 업로드되나요?

아니요. 입력은 브라우저 안에서 처리되며 서버로 전송되지 않습니다.

더 깊이 읽기

마지막 업데이트: