JSON to CSV 변환기

JSON 배열을 CSV 형식으로 변환

로컬에서 실행 · 시크릿 붙여넣기 안전
CSV가 여기에 표시됩니다…

JSON to CSV 변환이란?

JSON to CSV 변환은 JSON 형식의 구조화된 데이터를 스프레드시트, 데이터베이스, 분석 도구가 기본적으로 처리할 수 있는 쉼표로 구분된 값(표 형식)으로 변환합니다. JSON은 고정 스키마 없이 중첩 객체와 배열로 데이터를 저장합니다. CSV는 필드 이름을 정의하는 헤더 행이 있는 행과 열로 데이터를 저장합니다. 이 변환은 API 데이터가 스프레드시트와 데이터베이스에 도달하는 방식입니다.

CSV(Comma-Separated Values)는 RFC 4180으로 정의됩니다. 각 줄이 하나의 레코드이며, 줄 내 필드는 구분자 문자(가장 일반적으로 쉼표)로 구분됩니다. 구분자, 큰따옴표, 줄바꿈이 포함된 필드는 큰따옴표로 묶어야 하며, 내부 따옴표는 두 개를 사용해 이스케이프합니다. 이 이스케이프 처리가 JSON-to-CSV 변환기를 직접 작성할 때 버그가 가장 많이 발생하는 원인입니다.

입력이 일관된 키를 가진 평탄한 객체 배열일 때 변환은 간단합니다. 각 객체가 하나의 행이 되고, 각 고유 키가 열 헤더가 됩니다. 중첩 객체와 배열은 평탄화 단계가 필요하며, 객체 간 키가 일치하지 않으면 누락된 필드를 처리하는 전략(일반적으로 셀을 빈 값으로 남김)이 필요합니다. 신뢰할 수 있는 변환기는 이러한 모든 엣지 케이스를 자동으로 처리합니다.

JSON을 CSV로 변환하는 이유

API는 JSON을 반환하지만 스프레드시트, SQL 데이터베이스, BI 도구는 표 형식 데이터를 필요로 합니다. JSON을 CSV로 변환하면 커스텀 가져오기 스크립트 없이 이러한 시스템 간에 데이터를 이동할 수 있습니다.

브라우저에서 즉시 변환
JSON을 붙여넣고 파일을 즉시 다운로드합니다. 서버 업로드 없음, 외부 API의 파일 크기 제한 없음, 처리 대기 없음.
🔒
개인정보 보호 우선 처리
데이터가 브라우저에 남아 있습니다. 변환은 기기의 JavaScript로 완전히 실행됩니다. 데이터베이스 내보내기, 사용자 기록, 금융 데이터가 외부로 전송되지 않습니다.
🔀
다양한 구분자 지원
쉼표, 세미콜론, 탭, 파이프 구분자 중에서 선택합니다. 유럽 로케일 스프레드시트에는 세미콜론을, TSV 파일에는 탭을, 레거시 시스템 가져오기에는 파이프를 사용합니다.
📋
계정 불필요
페이지를 열고 변환합니다. 가입, API 키, CLI 설치 불필요. 최신 브라우저가 있는 모든 기기에서 작동합니다.

JSON to CSV 활용 사례

스프레드시트용 API 데이터 내보내기
REST API는 JSON을 반환합니다. 제품 관리자와 분석가는 해당 데이터를 Excel 또는 Google Sheets에서 필요로 합니다. API 응답을 CSV로 변환하여 모든 스프레드시트 애플리케이션에서 직접 열 수 있습니다.
데이터베이스 대량 가져오기
PostgreSQL COPY, MySQL LOAD DATA, SQLite .import는 모두 CSV를 허용합니다. 커스텀 가져오기 스크립트 없이 빠른 대량 로딩을 위해 데이터셋을 표 형식으로 변환합니다.
ETL 파이프라인 프로토타이핑
ETL 파이프라인에는 원시 JSON으로 검사하기 어려운 중간 출력이 자주 있습니다. 단계의 출력을 CSV로 변환하고 스프레드시트에서 열어 전체 파이프라인을 연결하기 전에 변환을 검증합니다.
QA 테스트 데이터 준비
QA 엔지니어는 JSON으로 테스트 픽스처를 생성하지만, 많은 테스트 프레임워크와 데이터 기반 테스팅 도구는 매개변수화된 테스트 입력에 CSV를 허용합니다. 수동 재포매팅 없이 픽스처를 CSV로 변환합니다.
로그 분석 및 보고
애플리케이션과 클라우드 서비스의 구조화된 JSON 로그를 CSV로 변환하여 Tableau, Power BI, Looker 같은 BI 도구로 가져와 시각화 및 보고에 사용할 수 있습니다.
학술 데이터 처리
오픈 데이터 API를 사용하는 학생과 연구자는 JSON 응답을 받습니다. CSV로 변환하면 파싱 코드 없이 R, pandas, SPSS, Excel에서 분석할 수 있습니다.

CSV 구분자 참조

구분자 문자는 각 행의 필드를 구분합니다. 쉼표가 가장 일반적이지만, 특정 상황에서는 다른 구분자가 표준입니다. 잘못된 구분자를 선택하면 파일을 열 때 필드가 합쳐지거나 잘못 분리될 수 있습니다.

구분자문자확장자사용 시점
Comma,.csvDefault for most spreadsheets and databases
Semicolon;.csvStandard in locales where comma is a decimal separator (DE, FR, BR)
Tab\t.tsvAvoids escaping when field values contain commas or semicolons
Pipe|.csvUsed in fixed-width legacy systems and some ETL pipelines

CSV에서 중첩 JSON 처리

CSV는 중첩 객체나 배열을 기본적으로 표현할 방법이 없는 평탄한 형식입니다. JSON에 중첩 구조가 포함된 경우 변환기는 이를 열로 평탄화해야 합니다. 여러 전략이 있으며, 적합한 선택은 CSV가 어떻게 사용될지에 따라 다릅니다.

점 표기법 평탄화
중첩 키는 점으로 연결됩니다: {"address": {"city": "서울"}}는 address.city라는 열 이름에 서울이라는 값이 됩니다. 이는 가장 일반적인 접근 방식으로, 중첩 필드 참조를 지원하는 도구에서 잘 작동합니다.
배열 인덱스 열
배열은 번호가 붙은 열로 확장됩니다: {"tags": ["a", "b"}}는 tags.0 = a, tags.1 = b가 됩니다. 모든 값이 보존되지만 배열이 크면 열이 많아집니다.
JSON 문자열 대체
복잡한 중첩 값은 CSV 셀 내에 JSON 문자열로 직렬화됩니다. 셀에는 원시 JSON 텍스트가 포함됩니다. 전체 구조가 보존되지만 소비자가 셀 값을 파싱해야 합니다.
중첩 필드 무시
일부 변환기는 중첩 객체와 배열을 완전히 제거하고 스칼라(문자열, 숫자, 불리언, null) 필드만 유지합니다. 깔끔한 CSV가 생성되지만 데이터가 손실됩니다. 중첩 필드가 필요하지 않다고 확실할 때만 유용합니다.

코드 예제

JSON을 CSV로 프로그래밍 방식으로 변환하려면 헤더 추출, 필드 인용, 구분자 이스케이프 처리가 필요합니다. 대부분의 언어에는 CSV 작성을 위한 내장 또는 표준 라이브러리 지원이 있습니다.

JavaScript (Node.js)
const data = [
  { name: "Alice", age: 30, city: "Berlin" },
  { name: "Bob", age: 25, city: "Tokyo" },
]

// Extract headers from the first object
const headers = Object.keys(data[0])
const csv = [
  headers.join(","),
  ...data.map(row => headers.map(h => {
    const val = String(row[h] ?? "")
    // Quote fields that contain commas, quotes, or newlines
    return val.includes(",") || val.includes('"') || val.includes("\n")
      ? '"' + val.replace(/"/g, '""') + '"'
      : val
  }).join(","))
].join("\n")

console.log(csv)
// → name,age,city
// → Alice,30,Berlin
// → Bob,25,Tokyo
Python
import json, csv, io

json_str = '[{"name":"Alice","age":30,"city":"Berlin"},{"name":"Bob","age":25,"city":"Tokyo"}]'
data = json.loads(json_str)

output = io.StringIO()
writer = csv.DictWriter(output, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)

print(output.getvalue())
# → name,age,city
# → Alice,30,Berlin
# → Bob,25,Tokyo
CLI (jq + Miller)
# Using jq to convert JSON array to CSV
echo '[{"name":"Alice","age":30},{"name":"Bob","age":25}]' | \
  jq -r '(.[0] | keys_unsorted) as $k | $k, (.[] | [.[$k[]]] ) | @csv'
# → "name","age"
# → "Alice",30
# → "Bob",25

# Using Miller (mlr) for streaming conversion
echo '[{"name":"Alice","age":30}]' | mlr --json --ocsv cat
# → name,age
# → Alice,30
Go
package main

import (
    "encoding/csv"
    "encoding/json"
    "fmt"
    "os"
)

func main() {
    jsonStr := `[{"name":"Alice","age":30},{"name":"Bob","age":25}]`
    var data []map[string]interface{}
    json.Unmarshal([]byte(jsonStr), &data)

    w := csv.NewWriter(os.Stdout)
    // Write header
    headers := []string{"name", "age"}
    w.Write(headers)
    // Write rows
    for _, row := range data {
        record := make([]string, len(headers))
        for i, h := range headers {
            record[i] = fmt.Sprintf("%v", row[h])
        }
        w.Write(record)
    }
    w.Flush()
    // → name,age
    // → Alice,30
    // → Bob,25
}

자주 묻는 질문

이 변환기는 어떤 JSON 구조를 기대하나요?
변환기는 [{"name":"김민준"},{"name":"이서연"}]와 같은 JSON 객체 배열을 기대합니다. 배열의 각 객체가 출력의 한 행이 되고, 객체 키가 열 헤더가 됩니다. 배열로 묶이지 않은 단일 JSON 객체는 1행 테이블로 처리됩니다.
중첩 객체와 배열은 어떻게 처리되나요?
중첩 값은 점 표기법을 사용해 평탄화됩니다. 예를 들어, {"address":{"city":"서울"}'}은 address.city라는 열을 생성합니다. 배열은 인덱스 열로 확장됩니다(tags.0, tags.1). 데이터를 보존하면서 출력을 평탄하게 유지합니다.
객체마다 키가 다를 경우 어떻게 되나요?
변환기는 배열의 모든 객체에서 고유 키를 수집하여 열 헤더로 사용합니다. 특정 키가 없는 객체는 해당 열에 빈 셀이 생깁니다. 데이터 손실은 없으며, 열 순서는 키가 처음 나타나는 순서를 따릅니다.
쉼표 대신 세미콜론이나 탭을 사용할 수 있나요?
네. 이 도구는 쉼표, 세미콜론, 탭, 파이프 구분자를 지원합니다. 데이터나 로케일에서 쉼표를 소수점 구분자로 사용하는 경우(독일어, 프랑스어, 브라질 스프레드시트에서 일반적) 세미콜론을 사용하세요. Unix 도구가 처리하는 TSV 파일에는 탭을 사용하세요.
변환은 무손실인가요?
일관된 스칼라 값을 가진 평탄한 JSON 배열의 경우 그렇습니다. 출력 파일은 동일한 데이터를 포함하며 동일한 JSON으로 다시 변환할 수 있습니다. 중첩 구조의 경우 평탄화가 데이터의 형태를 변경합니다. 인덱스 열이나 JSON 문자열로 직렬화된 배열 값은 재구성할 수 있지만, 원래 구조를 알아야 합니다.
얼마나 큰 JSON 파일을 변환할 수 있나요?
이 도구는 브라우저에서 실행되며 메모리에서 데이터를 처리합니다 — 최신 기기에서 10–20MB 파일은 문제없이 변환됩니다. 그보다 큰 파일에는 jq, Miller, 또는 csv 모듈을 사용하는 Python 스크립트 같은 CLI 도구를 사용하세요. 이 도구들은 데이터를 스트림으로 처리합니다.
이 도구에 민감한 데이터를 붙여넣어도 안전한가요?
네. 모든 처리는 JavaScript를 사용해 브라우저에서 이루어집니다. 어떤 서버에도 데이터가 전송되지 않습니다. 변환 중 브라우저의 개발자 도구를 열고 네트워크 탭을 확인하면 직접 확인할 수 있습니다.