총 54개 서포트 유틸리티
100% 브라우저 자체 연산 (서버 전송 없음)
Zero Latency 실시간 결과
완전 프라이빗 개인정보 보호
개발자 및 데이터 Client Local

JSON TO CSV / CSV TO JSON

개발자, 데이터 엔지니어 및 분석가를 위해 JSON 배열/객체를 CSV 파일로 정제하거나 CSV 데이터를 구조화된 JSON 객체 배열로 실시간 양방향 변환하는 클라이언트 사이드 데이터 파이프라인 유틸리티입니다. 복잡하게 얽힌 중첩 객체의 재귀적 점 표기법 평탄화(Recursive Dot-Notation Flattening), RFC 4180 이스케이프 규격 준수, 4대 구분자(Comma, Semicolon, Tab, Pipe) 선택 및 데이터 테이블 그리드 미리보기 오버레이를 지원합니다.

변환 파이프라인 설정 (Configuration)

INPUT: JSON (입력 데이터)
OUTPUT: CSV (변환 결과)
데이터 엔지니어링 및 직렬화 아키텍처 가이드

JSON과 CSV 상호 직렬화(Serialization) 알고리즘 및 구조적 변환 매커니즘 심층 분석

현대 소프트웨어 개발과 데이터 엔지니어링 환경에서 JSON(JavaScript Object Notation)과 CSV(Comma-Separated Values)는 가장 광범위하게 쓰이는 2대 표준 데이터 직렬화 포맷입니다. 백엔드 API와 마이크로서비스 간의 통신은 유연한 계층 구조를 갖는 JSON을 표준으로 채택하는 반면, 데이터 분석, 머신러닝 전처리 파이프라인(Pandas, NumPy), 엑셀/스프레드시트 보고서 작성 및 대용량 데이터베이스 대량 적재(Bulk Insert)는 경량화된 2차원 표 형식의 CSV를 핵심 기반으로 활용합니다.

본 변환 유틸리티는 깊게 중첩된 비선형 JSON 객체를 2차원 평면 테이블 헤더로 사상하는 점 표기법 평탄화(Dot-Notation Recursive Flattening) 알고리즘과, 쉼표·줄바꿈·인용부호가 혼재된 필드를 안전하게 파싱하는 RFC 4180 준수 유한 상태 기계(Finite State Machine) 파서를 탑재하여 브라우저 메모리 상에서 무손실 양방향 변환을 수행합니다.

중첩 객체 점 표기법 평탄화 (Recursive Dot-Notation)

metrics.users.active와 같이 깊게 중첩된 다차원 JSON 객체 트리를 단일 2차원 테이블 컬럼 헤더로 자동 분해 및 평탄화합니다.

RFC 4180 표준 쿼팅 & 자동 이스케이프

필드 내부의 쉼표(,), 개행 문자(\n), 큰따옴표(")를 정규 토큰화하여 데이터 유실 및 열 밀림 현상 없는 무결성 CSV를 생성합니다.

인터랙티브 데이터 그리드 테이블 프리뷰

변환된 결과물을 대화형 그리드 테이블 모달로 즉시 시각화하여 대량 데이터의 열 정렬과 값 일치 여부를 실시간 검증할 수 있습니다.

1. JSON vs CSV vs TSV vs Parquet 데이터 직렬화 4대 포맷 기술 규격 비교표

현대 데이터 아키텍처에서 활용되는 주요 파일 형식들의 구조적 특징과 장단점 비교입니다.

비교 항목 (Feature)JSON (JavaScript Object Notation)CSV (Comma-Separated Values)TSV (Tab-Separated Values)Apache Parquet (Columnar Storage)
데이터 모델 (Data Model)계층형 트리 (Hierarchical Key-Value)2차원 평면 테이블 (Row x Column)2차원 평면 테이블 (Row x Column)컬럼 기반 바이너리 (Columnar Binary)
타입 지원 (Type System)String, Number, Boolean, Array, Null순수 텍스트 (타입 메타데이터 없음)순수 텍스트 (타입 메타데이터 없음)강력한 정적 스키마 (Snappy/Gzip 내장)
중첩 구조 (Nesting)무제한 다차원 중첩 객체/배열 지원평탄화(Flattening) 전처리 필수평탄화(Flattening) 전처리 필수Dremel 프로토콜 기반 복합 중첩 지원
저장 효율 (Storage / Size)상대적으로 큼 (키 이름이 행마다 반복)매우 작음 (구분자 기반 순수 값)매우 작음 (주소/문장 데이터에 유리)압축률 극대화 (컬럼별 인코딩 압축)
주요 사용처 (Ecosystem)REST API, Web Frontend, MongoDB, ConfigExcel, Pandas, SQL RDBMS Bulk Load생명공학(Bioinformatics), NLP 코퍼스Big Data 레이크 (Spark, Athena, Snowflake)

2. RFC 4180 표준 규격 및 CSV 파싱 오토마타(Finite State Machine) 원리

① 단순 문자열 split(",") 연산의 치명적 한계:

- 주소 필드("Seoul, Gangnam-gu")나 본문 코멘트("Hello, World!\nNext Line")처럼 값 내부에 쉼표나 개행 문자가 포함된 경우, 단순 쉼표 분할(split)은 열 개수 불일치와 데이터 오염을 유발합니다.

② RFC 4180 표준 쿼팅 규칙:

- 필드 값에 구분자(,), 줄바꿈(\r\n), 또는 큰따옴표(")가 포함된 경우 해당 필드 전체를 반드시 큰따옴표로 감싸야(Enclosed in double quotes) 합니다.

- 필드 내부의 큰따옴표는 두 개의 연속된 큰따옴표("" -> Escaped quote)로 이중 이스케이프 처리됩니다.

③ 유한 상태 기계(FSM) 토큰화 알고리즘:

- 본 변환기는 OUTSIDE_QUOTE 상태와 INSIDE_QUOTE 상태를 추적하는 문자 단위 스트림 오토마타를 통해, 복잡한 인용부호와 이중 개행이 혼재된 CSV라도 단 한 글자의 유실 없이 완벽하게 복원합니다.

3. 계층형 JSON의 점 표기법(Dot-Notation) 재귀 평탄화 및 비균질 스키마 정합성

① 계층 구조 키 결합 공식 (Recursive Inductive Key Joining):

- 깊이 dd의 중첩 객체 OO에 대해, 부모 경로 P=k1.k2...kd1P = k_1.k_2...k_{d-1}와 리프 키 kdk_d의 평탄화된 컬럼 명칭은 Kflat=P+"."+kdK_{flat} = P + "." + k_d 로 귀납 정의됩니다.

② 비균질 스키마(Sparse Heterogeneous Matrix) 자동 정합성:

- 실무 JSON 배열의 경우 어떤 객체에는 discount 필드가 존재하지만 다른 객체에는 누락되어 있을 수 있습니다.

- 본 변환기는 전체 배열의 모든 객체를 전수 순회(Set Union)하여 생성 가능한 모든 고유 키 목록(iKeys(Oi)\bigcup_{i} Keys(O_i))을 추출한 뒤, 특정 객체에 누락된 필드는 빈 문자열('')로 정렬 배치하여 열 밀림 현상을 원천 방지합니다.

4. CSV 수식 삽입 취약점(CSV Formula Injection / DDE Injection) 및 보안 가이드

① 스프레드시트 DDE 공격 위험성:

- 사용자 입력값이 =, +, -, @ 기호로 시작하는 경우, 변환된 CSV를 Microsoft Excel이나 LibreOffice에서 열 때 소프트웨어가 이를 계산 수식(Formula) 또는 동적 데이터 교환(DDE) 명령어로 인식하여 악성 외부 URL 호출이나 로컬 명령어가 실행될 위험이 있습니다.

② 안전한 CSV 처리 수칙:

- 본 도구는 브라우저 내부에서 안전한 텍스트 파싱을 수행하므로 웹상에서의 실행 위험은 없습니다.

- 다만 사용자가 신뢰할 수 없는 외부 사용자의 입력을 엑셀용 CSV로 내보낼 때는 선행 특수문자 앞에 작은따옴표(')를 접두어로 붙여 수식 실행을 방지하는 새니타이징(Sanitizing)을 권장합니다.

5. 프로그래밍 언어별 JSON ↔ CSV 변환 실무 코드 예시 (Code Cheatsheets)

JavaScript / TypeScript (Pure Node.js & Browser)
// JSON to CSV in Modern JavaScript
function jsonToCsv(jsonArray) {
  if (!jsonArray || !jsonArray.length) return '';
  const headers = Object.keys(jsonArray[0]);
  const csvRows = [
    headers.join(','), // Header Row
    ...jsonArray.map(row => 
      headers.map(fieldName => {
        const val = row[fieldName] ?? '';
        const str = typeof val === 'object' ? JSON.stringify(val) : String(val);
        return str.includes(',') || str.includes('\n') || str.includes('"')
          ? `"${str.replace(/"/g, '""')}"`
          : str;
      }).join(',')
    )
  ];
  return csvRows.join('\n');
}
Python 3 (pandas & built-in csv)
import pandas as pd
import json

# 1. JSON to CSV with Flattening
with open("data.json", "r", encoding="utf-8") as f:
    raw_data = json.load(f)
df = pd.json_normalize(raw_data) # Automatic Nested Flattening
df.to_csv("output.csv", index=False, encoding="utf-8-sig")

# 2. CSV to JSON
df_csv = pd.read_csv("output.csv")
json_result = df_csv.to_json(orient="records", force_ascii=False, indent=2)
print(json_result)
Terminal / CLI (jq & csvkit)
# JSON to CSV using jq CLI tool
cat users.json | jq -r '(.[0] | keys_unsorted) as $keys | $keys, map([.[$keys[]]])[] | @csv' > users.csv

# CSV to JSON using csvkit CLI tool
csvjson users.csv | jq '.' > users.json
Go (encoding/csv & encoding/json)
package main

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

type User struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

func main() {
	file, _ := os.Create("output.csv")
	defer file.Close()
	writer := csv.NewWriter(file)
	defer writer.Flush()

	writer.Write([]string{"id", "name"})
	writer.Write([]string{"101", "Alpha Project"})
}

자주 묻는 질문 (FAQ)

Q.중첩된(Nested) JSON 객체를 CSV로 변환할 때 데이터 유실이 발생하지 않나요?

중첩 객체 평탄화(Flatten Nested Objects) 옵션을 활성화하면 user.address.city와 같이 점 표기법(Dot Notation)으로 모든 계층 구조를 2차원 단일 테이블 컬럼으로 자동 펼쳐서 변환하므로 데이터 유실이 전혀 발생하지 않습니다. 복합 객체 배열의 경우 문자열로 안전하게 인코딩됩니다.

Q.변환된 CSV 파일을 엑셀(MS Excel)에서 열었을 때 한글이나 특수문자가 깨집니다. 해결 방법이 있나요?

본 도구에서 다운로드되는 CSV는 표준 UTF-8 인코딩으로 저장됩니다. 구버전 Microsoft Excel은 기본적으로 ANSI(CP949)로 파일을 열기 때문에 한글 깨짐이 발생할 수 있습니다. 엑셀의 데이터 > 텍스트/CSV에서 가져오기 메뉴를 통해 65001: 유니코드(UTF-8)을 선택하여 가져오시거나, 메모장에서 UTF-8 with BOM으로 재저장하시면 깨짐 없이 정상 표시됩니다.

Q.대용량 JSON/CSV 파일도 웹 브라우저에서 안전하게 변환할 수 있나요?

네, 가능합니다. 본 도구는 수만 행에 달하는 텍스트 데이터를 사용자의 로컬 컴퓨터 메모리 상에서 직접 파싱합니다. 데이터가 외부 서버로 업로드되지 않으므로 사내 보안 규정이 적용되는 고객 정보나 비공개 재무 데이터도 안심하고 처리할 수 있습니다.

Q.CSV 구분자로 쉼표(,) 외에 탭(\t)이나 세미콜론(;), 파이프(|)를 사용하는 이유는 무엇인가요?

텍스트 본문이나 주소 데이터에 쉼표가 빈번하게 포함된 경우, 쉼표 대신 탭(\t, TSV)이나 파이프(|, PSV)를 구분자로 활용하면 인용부호 이스케이프 처리 부담을 줄이고 파싱 속도와 가독성을 크게 개선할 수 있습니다. 유럽권 국가의 경우 소수점 표기에 쉼표(1,5)를 사용하므로 세미콜론(;) 구분자가 널리 사용됩니다.

Q.CSV를 JSON으로 변환할 때 숫자와 불리언(True/False)이 문자열로 들어가는 것을 방지할 수 있나요?

네, 가능합니다. 숫자/불리언 자동 파싱 (Parse Numbers/Booleans) 옵션을 켜두시면 "123"은 숫자 123으로, "true"는 불리언 true, "null"null 데이터 타입으로 자동 추론하여 변환합니다. 모든 값을 문자열 원본 그대로 유지하고 싶으시다면 해당 옵션을 해제하시면 됩니다.

Q.객체 배열(Array of Objects)과 2차원 배열(2D Array / Matrix) 출력 포맷의 차이는 무엇인가요?

객체 배열[{"id": 1, "name": "A"}] 형태로 키-값 쌍이 명시되어 웹 API 통신에 이상적입니다. 반면 2차원 배열[["id", "name"], [1, "A"]] 형태로 헤더와 값의 인덱스 매트릭스만을 표현하여 Chart.js와 같은 차트 라이브러리나 행렬 연산 엔진에 데이터를 바인딩할 때 메모리와 처리 성능 면에서 유리합니다.