JSONL 변환기
브라우저에서 JSONL/NDJSON을 JSON 배열로 변환하고 JSON 배열을 JSON Lines로 되돌리며, 줄별 검증과 유효 레코드 내보내기를 지원합니다. 큰 ID 같은 숫자는 입력한 자릿수 그대로 남습니다.
- 브라우저에서 처리
- 데이터가 브라우저 밖으로 나가지 않습니다
- 무료 · 회원가입 불필요
WeChat으로 스캔하여 공유
예시·자세한 설명·자주 묻는 질문 실제 출력이 있는 예시, 다른 도구와의 차이, 자주 묻는 질문.
예시: 주문 로그의 큰 주문번호
주문번호를 64비트 정수로 쓰는 시스템에서는 값이 253을 넘기도 합니다. JavaScript에서 JSON.parse() 후 JSON.stringify()하면 끝자리가 바뀌지만, 이 도구는 JSON.parse()를 문법 검사에만 쓰고 숫자는 입력한 문자를 그대로 씁니다.
{"order_no":9007199254740993,"amount":15000.0,"region":"부산"}
{"order_no":9007199254740995,"amount":8900.50,"region":"\uc11c\uc6b8"}
[
{
"order_no": 9007199254740993,
"amount": 15000.0,
"region": "부산"
},
{
"order_no": 9007199254740995,
"amount": 8900.50,
"region": "서울"
}
]
파싱한 뒤 다시 문자열로 만들면 9007199254740992, 9007199254740996, 15000, 8900.5가 됩니다. 문자열은 JSON.stringify()의 표준 표기로 출력하므로 "\uc11c\uc6b8"은 “서울”이 되고, compact JSONL에서는 쉼표 뒤 공백도 사라집니다.
반대 방향에서도 숫자는 유지됩니다.
[
{"order_no": 9007199254740993, "amount": 15000.0},
{"order_no": 9007199254740995, "amount": 8900.50}
]
{"order_no":9007199254740993,"amount":15000.0}
{"order_no":9007199254740995,"amount":8900.50}
복사와 저장
복사 버튼과 두 저장 버튼은 마지막으로 성공한 변환의 결과를 씁니다. JSONL → JSON 후에는 .json 저장이 오른쪽 배열을 저장하고, JSONL 쪽 복사와 .jsonl 저장은 변환된 레코드를 한 줄에 하나씩 compact 형식으로 내보냅니다. 붙여넣은 원문과는 다르며, ‘유효한 줄만 변환’으로 뺀 오류 줄은 없고 공백도 제거되어 있습니다. JSON → JSONL 후에는 .json 저장이 현재 ‘JSON 보기 좋게 출력’ 설정으로 배열을 저장합니다.
첫 변환 전에는 버튼을 쓸 수 없습니다. 어느 쪽 패널이든 편집하거나, ‘빈 줄 무시’·‘유효한 줄만 변환’을 바꾸거나, 지우기(또는 도구 안에서 Ctrl+L / Cmd+L)를 누르거나, 변환이나 파일 읽기에 실패하면 바로 쓸 수 없게 됩니다. 변환에 실패하면 출력 쪽이 비워지므로 이전 입력의 결과를 복사하는 일은 없습니다. 자동 검증만으로는 버튼이 활성화되지 않습니다. ‘JSON 보기 좋게 출력’을 바꾸면 JSONL 쪽에 내용이 있을 때 JSONL → JSON을 다시 실행합니다.
JSONL과 JSON 배열
JSON 배열은 모든 레코드를 하나의 큰 문서 안에 감쌉니다. JSONL은 각 레코드를 독립적인 JSON 값으로 한 줄에 씁니다. 이 줄 중심 형식은 로그, 스트리밍 내보내기, 명령줄 처리, 대형 데이터셋에 잘 맞습니다.
예시: 3줄짜리 내보내기에 잘못된 줄이 하나
아래 내용을 JSONL 패널에 붙여넣고 350ms 후 자동 검증을 기다립니다.
{"id":1,"event":"signup"}
{"id":2,"event":"purchase",}
{"id":3,"event":"cancel"}
카운터는 전체 3줄, 유효 2, 오류 1, 빈 줄 0을 표시합니다. 문제 패널에는 2번째 줄과 브라우저의 파서 메시지가 나오며, Chrome에서는 Expected double-quoted property name in JSON at position 27 (line 1 column 28)입니다(위치는 해당 줄의 시작부터 센 값). Firefox와 Safari는 문구가 다릅니다. 이 줄을 고치거나 유효한 줄만 변환을 켜기 전까지 JSONL → JSON은 오류로 멈춥니다. 옵션을 켜면 1번과 3번 레코드가 출력되고 “JSONL 레코드 2개를 JSON 배열로 변환했습니다.”가 표시되며, .jsonl 저장은 다음 내용을 저장합니다.
{"id":1,"event":"signup"}
{"id":2,"event":"purchase",}
{"id":3,"event":"cancel"}
{"id":1,"event":"signup"}
{"id":3,"event":"cancel"}
명령줄에서 같은 작업
스크립트에 넣을 때는 jq로 같은 변환을 할 수 있습니다(jq 1.7.1 실제 출력).
jq -c '.[]' data.json > data.jsonl # JSON 배열 → JSONL
jq -s '.' data.jsonl > data.json # JSONL → JSON 배열
jq -c . bad.jsonl # 첫 오류에서 멈춤:
# jq: parse error: Expected another key-value pair at line 2, column 28
jq는 첫 오류에서 멈춥니다. 이 도구는 모든 줄을 파싱해 오류 줄을 한 번에 보여 줍니다.
제한
- 중복 키는 마지막 값이 남습니다.
JSON.parse()와 같이{"x":1,"x":2}는 첫x자리에서{"x":2}가 됩니다. - 배열 인덱스처럼 보이는 키는 객체 맨 앞으로 옮겨져 숫자 오름차순으로 정렬됩니다(JavaScript 객체와 동일).
{"b":1,"2":2,"1":3}는{"1":3,"2":2,"b":1}가 됩니다. 값은 바뀌지 않습니다. - JSON → JSONL은 최상위 배열만 받습니다. 객체나 단일 값이면 “JSON 입력은 배열이어야 합니다.”가 표시됩니다.
- 레코드 하나는 한 줄에 있어야 합니다. 여러 줄로 정렬된 객체는 걸친 줄마다 오류가 납니다. 줄바꿈으로 나눈 뒤 각 줄의 앞뒤 공백을 제거하므로 Windows CRLF 파일도 그대로 쓸 수 있습니다.
- 문제 패널은 처음 40개 오류 줄만 보여 주며, 오류 카운터는 전부 셉니다.
FAQ
JSONL이란 무엇인가요?
JSONL은 JSON Lines 또는 NDJSON이라고도 부르며, 한 줄에 하나의 완전한 JSON 값을 저장하는 형식입니다. 로그, 데이터 내보내기, 스트리밍 API, AI 데이터셋에서 자주 사용됩니다.
어떤 JSON 입력을 JSONL로 변환할 수 있나요?
JSON 배열을 붙여넣으면 됩니다. 배열의 각 항목은 한 줄의 compact JSONL이 됩니다. 객체, 배열, 문자열, 불리언, null을 유지하고, 숫자는 입력한 문자 그대로 출력하므로 9007199254740993, 1.50, 1e-7도 바뀌지 않습니다.
빈 줄은 어떻게 처리되나요?
기본 설정에서는 빈 줄을 무시합니다. 옵션을 끄면 빈 줄이 줄 단위 검증 문제로 표시됩니다.
유효한 JSONL 레코드만 내보낼 수 있나요?
가능합니다. '유효한 줄만 변환'을 켜고 JSONL → JSON을 클릭하면 JSON 배열에는 유효한 레코드만 들어가고, '.jsonl 저장'은 같은 레코드를 한 줄에 하나씩 저장합니다. 자동 검증은 줄을 확인하기만 하며, 변환이 성공하기 전까지 복사·저장 버튼은 쓸 수 없습니다.
데이터는 어디에서 처리되나요?
파싱, 검증, 변환, 파일 내보내기는 모두 브라우저 내부의 로컬 JavaScript API로 실행됩니다.