JSON 배열의 항목 하나가 JSONL의 한 줄이 됩니다
JSON 배열은 대괄호 [ ] 안에 값을 쉼표로 늘어놓은 JSON 문서 하나입니다. JSONL(JSON Lines)은 한 줄에 JSON 값을 하나씩 적고 줄바꿈으로 나눈 형식입니다. 두 형식은 같은 목록을 담을 수 있지만 읽는 방식이 다릅니다. 배열은 닫는 대괄호까지 문서 전체를 읽어야 끝나고, JSONL은 한 줄씩 읽거나 맨 끝에 한 줄을 덧붙일 수 있습니다. 위 예시 배열에는 주문 네 건이 들어 있으므로 JSONL로 바꾸면 네 줄이 됩니다.
이 변환기는 붙여 넣은 글이 배열인지 JSONL인지 보고 방향을 알아서 맞춥니다. {"data": [ … ]}처럼 객체로 감싼 API 응답이 여러 줄로 정리돼 있으면 안에 든 배열을 찾아 바꿉니다. 한 줄로 압축된 응답은 JSONL 한 줄로 읽히므로 방향을 'JSON 배열 → JSONL'로 바꾸면 됩니다. 결과 칸에는 줄마다 번호, 모양 글자, 크기 막대가 붙고, 줄을 누르면 그 값을 펼쳐 볼 수 있습니다. 아래 '키 구성'에서는 항목마다 키가 빠졌는지, 같은 키에 숫자와 문자열이 섞였는지를 막대로 확인합니다. 입력한 글과 파일은 서버로 보내지 않고 이 브라우저에서만 처리합니다.
언제 JSON 배열과 JSONL을 서로 바꾸나
- OpenAI Batch API 입력 파일을 만들 때: 배치 작업은 .jsonl 파일의 한 줄을 요청 하나로 읽고, 요청마다 서로 다른 custom_id가 있어야 합니다. 배치 하나에는 요청을 50,000건까지, 입력 파일은 200 MB까지 넣을 수 있습니다. 요청 목록을 배열로 만들었다면 JSONL로 바꾼 뒤 키 구성에서 custom_id에 '값이 모두 다름'이 붙었는지 확인하세요.
- BigQuery 같은 데이터 웨어하우스에 올릴 때: Google Cloud 문서는 불러올 JSON이 줄바꿈으로 구분돼 있어야 하고 객체 하나가 한 줄에 있어야 한다고 안내합니다. API에서 받은 배열 파일을 그대로 올리면 이 조건에 맞지 않으므로 먼저 JSONL로 바꿉니다.
- 쌓인 로그를 한 문서로 넘길 때: 한 줄씩 덧붙여 쌓은 JSONL 로그를 차트 도구나 JavaScript 코드처럼 JSON 문서 하나를 읽는 프로그램에 넘기려면 JSON 배열로 묶어야 합니다.
- 큰 자료를 나눠 처리할 때: JSONL은 줄 수로 잘라도 조각마다 그대로 JSONL입니다. 배열은 잘린 곳에 대괄호와 쉼표가 어긋나 조각마다 고쳐야 하므로, 나눠 보내거나 나눠 처리할 자료는 JSONL이 편합니다.
변환 규칙
- JSON 배열 → JSONL: 맨 바깥 배열의 항목마다 한 줄을 씁니다. 문자열 밖의 공백과 줄바꿈만 걷어 내고 숫자 표기, 이스케이프, 키 순서는 원문 그대로 둡니다. 줄 끝은 LF이고, JSON Lines 문서가 권하는 대로 마지막 줄 뒤에도 LF를 붙이며, BOM은 붙이지 않습니다. 빈 배열 []은 항목이 없어 0바이트가 됩니다.
- 감싼 API 응답: 맨 바깥이 객체이면 그 안에서 배열을 찾습니다(data.items처럼 키 3단계까지). 객체가 가장 많이 든 배열을 먼저 고르고, 위 띠의 '변환할 배열'에서 다른 배열이나 '객체 전체를 한 줄로'를 고를 수 있습니다.
- JSONL → JSON 배열: 줄마다 JSON 값 하나를 읽어 배열 항목으로 넣습니다. Windows의 CRLF 줄 끝도 읽습니다. JSON Lines는 빈 줄을 유효한 값으로 보지 않으므로 빈 줄은 오류로 알립니다. 배열 모양은 2칸·4칸 들여쓰기, 항목마다 한 줄, 모두 한 줄 가운데에서 고릅니다.
- 느슨하게 읽기: 빈 줄, 줄 끝 쉼표, 여러 줄에 걸쳐 들여쓴 값, RS 구분 문자(0x1E)를 건너뛰고 값을 차례로 읽습니다. NDJSON 명세는 빈 줄을 조용히 무시하는 것을 허용하면서도 그 동작을 문서에 적고 설정으로 바꿀 수 있게 하라고 합니다. 그래서 기본은 꺼 두고, 오류가 나면 오류 카드의 버튼으로 바로 켤 수 있게 했습니다.
- 방향 자동 감지: 입력 칸을 통째로 바꾸는 붙여넣기와 파일 열기 때만 방향을 맞춥니다. 대괄호로 감싼 배열 하나와 여러 줄에 걸친 객체 하나(보기 좋게 정리된 API 응답)는 JSON 배열로 보고, 한 줄짜리 객체를 포함한 나머지는 JSONL로 봅니다. Batch API 요청 줄처럼 한 줄에 쓴 객체는 JSONL 한 줄이기 때문입니다. 한 줄로 압축된 API 응답도 JSONL 한 줄로 읽히므로, 그 안의 배열을 줄로 나누려면 방향을 'JSON 배열 → JSONL'로 바꾸세요. 직접 타자를 치는 동안에는 방향을 바꾸지 않습니다.
- 값 종류: JSON Lines는 객체뿐 아니라 숫자·문자열·배열·null도 한 줄의 값으로 허용합니다. 이 변환기도 모든 값을 옮기고, 객체가 아닌 항목 수는 키 구성에 따로 알립니다.
예시: 주문 네 건이 JSONL 네 줄로
위 첫 화면의 배열을 JSONL로 바꾼 결과입니다. 크기는 줄바꿈을 뺀 UTF-8 바이트 수이고, 모양은 같은 키 묶음끼리 같은 글자를 붙인 것입니다.
| 줄 | JSONL 내용 | 크기 | 모양 |
|---|---|---|---|
| 1 | {"id":1001,"고객":"민지","수량":2,"태그":["신규","쿠폰"]} | 69 B | A |
| 2 | {"id":1002,"고객":"준호","수량":1,"메모":"문 앞에 두세요\n벨은 누르지 마세요"} | 100 B | B |
| 3 | {"id":1003,"고객":"서연","수량":3,"태그":[]} | 52 B | A |
| 4 | {"id":1004,"고객":"도윤","수량":"2","태그":["단골"]} | 62 B | A |
들여쓰기와 공백이 든 입력 배열은 330바이트이고, JSONL 결과는 줄바꿈 네 개를 더해 287바이트입니다. 2번째 줄 메모에 보이는 \n은 문자열 안에 적은 이스케이프라서 실제 줄바꿈이 아니고, 객체 전체가 한 줄에 그대로 남습니다. 같은 네 줄을 거꾸로 JSON 배열로 묶으면 배열 모양에 따라 크기가 이렇게 달라집니다.
| 배열 모양 | 크기 | 쓰기 좋은 곳 |
|---|---|---|
| 2칸 들여쓰기 | 441 B | 사람이 구조를 눈으로 검토할 때 |
| 4칸 들여쓰기 | 547 B | 4칸 들여쓰기를 쓰는 코드 저장소에 넣을 때 |
| 항목마다 한 줄 | 302 B | 버전 관리에서 바뀐 항목만 한 줄 차이로 보고 싶을 때 |
| 모두 한 줄 | 289 B | 크기를 가장 작게 해서 보낼 때 |
키 구성으로 확인할 것
- 모양 A·B: 키 묶음이 같은 항목에는 같은 글자를 붙이고, 가장 많은 모양이 A입니다. 예시에서는 A가 세 건이고, 메모가 있고 태그가 없는 2번째 주문만 B(+메모 −태그)입니다. 모양 칩을 누르면 그 모양의 줄만 결과 칸에서 강조합니다.
- 키 카드의 막대: 전체 항목 가운데 그 키가 든 항목의 비율과 값 종류(숫자·문자열·참거짓과 null·객체와 배열)를 보여 줍니다. 막대의 빈 부분은 그 키가 없는 항목입니다. 빈 부분이 있는 카드를 누르면 그 키가 빠진 줄을 강조합니다.
- 종류 섞임: 예시의 수량은 세 건이 숫자이고 한 건이 문자열 "2"입니다. 열마다 자료형을 정해 두는 데이터베이스나 분석 도구에 올리면 이런 값이 오류나 형 변환의 원인이 될 수 있으니 미리 맞추세요. null은 빈 값으로 흔히 섞이므로 섞임으로 세지 않습니다.
- 값이 모두 다름: 모든 항목에 있고 값 종류가 하나이며 같은 값이 한 번도 겹치지 않는 키에 붙습니다. id나 Batch API의 custom_id처럼 겹치면 안 되는 키를 확인할 때 씁니다.
- 경고: 안전한 정수 범위를 넘는 숫자, 한 객체에 같은 키가 두 번 나온 항목, 객체가 아닌 항목이 있으면 키 구성 위쪽에 따로 알립니다.
자주 틀리는 경우
| 입력 | 무엇이 문제인가 | 이렇게 고칩니다 |
|---|---|---|
| 줄 사이에 빈 줄이 있는 JSONL | JSON Lines에서는 빈 줄도 오류입니다. | 빈 줄을 지우거나 '느슨하게 읽기'를 켭니다. |
{"a":1},처럼 줄 끝에 쉼표 | 배열 안쪽을 그대로 복사한 모양이라 JSONL이 아닙니다. | 쉼표를 지우거나 '느슨하게 읽기'를 켭니다. |
| 여러 줄로 들여쓴 객체를 줄마다 | 한 줄에 값 하나가 다 들어 있지 않습니다. | '느슨하게 읽기'로 읽거나, 배열로 감싸 'JSON 배열 → JSONL'로 바꿉니다. |
{'a': 1, 'b': None} | 파이썬 딕셔너리를 그대로 출력한 모양입니다. JSON은 큰따옴표와 null만 씁니다. | 파이썬의 json 모듈로 다시 출력합니다. |
[1, 2,] | JSON은 마지막 항목 뒤의 쉼표를 허용하지 않습니다. | 닫는 괄호 앞 쉼표를 지웁니다. |
| 문자열 안의 실제 줄바꿈이나 탭 | JSON은 문자열 안의 제어 문자를 이스케이프하도록 정합니다(RFC 8259 §7). | 줄바꿈은 \n, 탭은 \t로 적습니다. |
{"우편번호": 0012} | JSON 숫자는 0으로 시작할 수 없습니다. | "0012"처럼 문자열로 적습니다. |
NaN, Infinity | JSON 문법에는 이런 값이 없습니다(RFC 8259 §6). | null이나 문자열로 바꿉니다. |
오류가 나면 결과 자리에 몇 번째 줄 몇 번째 글자인지와 그 줄의 문제 위치가 표시됩니다. '입력에서 위치 보기'를 누르면 입력 칸에서 그 글자로 바로 이동합니다.
큰 정수와 같은 키는 원문 그대로 옮깁니다
JSON 표준은 정수가 −(253)+1부터 (253)−1까지일 때 서로 다른 프로그램 사이에서 같게 읽힌다고 설명합니다(RFC 8259 §6). JavaScript가 정확히 다루는 가장 큰 정수도 9,007,199,254,740,991입니다. 이 변환기는 숫자를 계산용 숫자로 바꾸지 않고 적힌 글자를 그대로 옮기므로, 범위를 넘는 주문 번호도 바뀌지 않습니다. 같은 키가 한 객체에 두 번 나와도 지우지 않습니다. 다만 결과를 받는 프로그램은 다르게 읽을 수 있습니다.
| 입력 값 | 이 변환기의 결과 | JavaScript JSON.parse로 읽은 값 |
|---|---|---|
9007199254740993 | 9007199254740993 | 9007199254740992 |
{"id":1,"id":2} | {"id":1,"id":2} | {"id":2} |
1.50e+3 | 1.50e+3 | 1500 |
"é" | "é" | "é" |
JSON 표준은 같은 이름이 두 번 나온 객체를 받은 프로그램의 동작은 예측할 수 없다고 보고, 많은 구현이 마지막 짝만 남긴다고 적습니다(RFC 8259 §4). 파이썬의 json 모듈도 마지막 값을 씁니다. 그래서 키 구성은 같은 키가 두 번 나온 항목 수를 경고로 알리고, 키 카드에서는 마지막 값을 기준으로 셉니다. 긴 번호는 받는 쪽에서도 바뀌지 않도록 "9007199254740993"처럼 문자열로 다루는 편이 안전합니다.
JSON Lines·NDJSON 명세, RFC 8259·7464, OpenAI Batch 가이드, Google Cloud BigQuery 문서, 파이썬 json 문서, MDN 문서는 2026-10-20에 원문을 확인했습니다.
한계와 주의
- 입력은 5 MB(5,242,880바이트), 결과는 32 MB까지 변환합니다. gzip으로 압축한 파일(.jsonl.gz 등)은 풀어서 읽고 푼 크기로 셉니다. 더 큰 자료는 JSONL로 줄 단위로 나눠 처리하세요.
- 결과 칸은 처음 400줄, 펼쳐 보기는 앞의 20,000자, 키 카드는 24개, 모양 칩은 8가지까지 화면에 보여 줍니다. 복사와 저장에는 전체 결과가 들어갑니다.
- 키 구성은 항목의 맨 바깥 키만 셉니다. 객체 안에 든 객체의 키는 세지 않습니다.
- 중첩은 512단계까지 읽습니다. 파일은 UTF-8로 읽고(맨 앞 BOM은 뺌), BOM이 있는 UTF-16 파일도 읽습니다. 저장하는 파일은 압축하지 않은 UTF-8이며 BOM을 붙이지 않습니다.
- RS 문자로 값을 나누는 JSON 텍스트 시퀀스(RFC 7464)는 '느슨하게 읽기'로 읽기만 하고, 그 형식으로 쓰지는 않습니다.
- 이 변환기는 JSON 문법까지만 검사합니다. 받는 프로그램이 요구하는 키(custom_id 등)와 자료형은 그 서비스의 문서로 확인하세요.
출처
- 01JSON Lines줄마다 유효한 JSON 값 하나(모든 값 허용, 빈 줄은 유효하지 않음), 줄 끝 '\n'('\r\n'도 읽힘), 마지막 줄 끝 권장, BOM 금지, 확장자 .jsonl·.jsonl.gz — 2026-10-20 확인
- 02NDJSON — Newline Delimited JSON 명세'\n'·'\r\n' 구분, 빈 줄은 조용히 무시해도 됨(MAY, 문서화·설정 가능), 미디어 타입 application/x-ndjson, 확장자 .ndjson
- 03IETF — RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format§4 객체 안 이름은 고유해야 함(SHOULD)·중복 시 동작은 예측할 수 없음, §6 정수 [−(253)+1, (253)−1] 상호운용·Infinity·NaN 불가, §7 제어 문자 이스케이프, §8.1 BOM
- 04IETF — RFC 7464: JavaScript Object Notation (JSON) Text Sequences값마다 앞에 RS(0x1E), 미디어 타입 application/json-seq
- 05OpenAI — Batch API 가이드.jsonl 파일의 한 줄이 요청 하나, 요청마다 고유한 custom_id, 배치 하나에 요청 50,000건·입력 파일 200 MB
- 06Google Cloud — Loading JSON data from Cloud Storage (BigQuery)JSON 데이터는 줄바꿈으로 구분(ndJSON), 객체 하나가 한 줄, ndJSON은 JSON Lines와 같은 형식
- 07Python 문서 — json: JSON encoder and decoder객체 안에 같은 이름이 반복되면 마지막 이름·값 짝의 값만 씀
- 08MDN — Number.MAX_SAFE_INTEGERJavaScript의 가장 큰 안전한 정수 253 − 1 = 9,007,199,254,740,991
- 09MDN — JSON.parse()JSON의 숫자는 JavaScript 숫자로 바뀌며 정밀도를 잃을 수 있음, 큰 수는 문자열로 주고받는 방법
자주 묻는 질문
JSON 배열을 JSONL로 어떻게 바꾸나요?
위 입력 칸에 JSON 배열을 붙여 넣거나 파일을 열면 결과 칸에 항목 하나가 한 줄인 JSONL이 바로 나옵니다. 복사 버튼으로 옮기거나 JSONL 저장 버튼으로 .jsonl 파일을 받으세요. JSONL을 붙여 넣으면 방향이 'JSONL → JSON 배열'로 바뀌어 배열로 묶입니다.
JSON 파일의 확장자만 .jsonl로 바꾸면 되나요?
안 됩니다. 확장자를 바꿔도 내용은 바깥 대괄호와 항목 사이 쉼표가 있는 배열 그대로입니다. JSONL은 대괄호 없이 한 줄에 값 하나를 적어야 하므로 이 변환기처럼 항목을 줄마다 나눠 다시 써야 합니다.
API 응답이 {"data": [...]}처럼 감싸여 있으면요?
여러 줄로 정리된 응답은 그대로 붙여 넣으면 됩니다. 맨 바깥이 객체이면 그 안에서 배열을 찾아(키 3단계까지) 객체가 가장 많은 배열을 JSONL로 바꿉니다. 한 줄로 압축된 응답은 JSONL 한 줄로 읽히므로 방향을 'JSON 배열 → JSONL'로 고르세요. 다른 배열을 쓰거나 객체 전체를 한 줄로 만들려면 위 띠의 '변환할 배열'에서 고르세요.
JSONL 중간에 빈 줄이 있으면 어떻게 되나요?
JSON Lines 기준에서는 빈 줄도 오류라서 몇 번째 줄인지 알려 줍니다. 빈 줄을 지우거나 오류 카드의 '느슨하게 읽기' 버튼을 누르면 빈 줄을 건너뛰고 배열로 묶습니다. 마지막 줄 뒤의 줄바꿈 한 번은 오류가 아닙니다.
여러 줄로 들여쓴 객체를 넣었더니 오류가 납니다.
JSONL은 값 하나를 한 줄에 모두 적어야 해서 여러 줄로 들여쓴 객체는 첫 줄에서 값이 끝나지 않았다는 오류가 납니다. '느슨하게 읽기'를 켜면 줄과 상관없이 값을 차례로 읽어 배열로 묶고, 그 배열을 다시 JSONL로 바꾸면 한 줄씩 정리됩니다.
객체가 아닌 숫자나 문자열도 한 줄이 될 수 있나요?
됩니다. JSON Lines는 객체뿐 아니라 숫자·문자열·배열·null도 한 줄의 값으로 허용하므로 이 변환기도 그대로 옮깁니다. 다만 객체만 받는 도구가 많아 객체가 아닌 항목이 있으면 키 구성에서 개수를 알려 줍니다.
긴 숫자나 같은 키가 바뀌지 않나요?
바뀌지 않습니다. 숫자를 계산용 숫자로 바꾸지 않고 적힌 글자를 그대로 옮기므로 9007199254740993 같은 큰 정수와 1.50e+3 같은 표기가 그대로 남고, 같은 키가 두 번 나와도 지우지 않습니다. 받는 프로그램은 큰 수를 반올림하거나 마지막 키만 쓸 수 있어 키 구성에서 경고로 알립니다.
입력한 JSON이나 파일이 서버에 저장되나요?
저장되지 않습니다. 변환은 이 브라우저 안에서만 하고 입력한 글과 파일을 서버로 보내지 않습니다. 페이지를 닫으면 입력 내용도 사라집니다.