JSON Lines(JSONL) ⇔ JSON 배열 변환기
한 줄에 하나의 JSON 객체를 나열하는 JSON Lines 형식과 일반 JSON 배열을 서로 변환합니다. 머신러닝 데이터셋이나 로그 출력을 확인할 때 유용합니다.
사용 팁
- JSON Lines(JSONL)는 한 줄에 하나의 독립된 JSON 객체를 나열하는 형식으로, OpenAI의 파인튜닝용 데이터셋이나 Elasticsearch/Logstash의 로그 출력 등에서 표준적으로 사용됩니다.
- "JSONL → JSON 배열" 모드에서는 각 줄이 개별적으로 파싱 가능한 JSON 객체여야 합니다. 빈 줄은 자동으로 건너뜁니다.
- "JSON 배열 → JSONL" 모드에서는 입력 전체가 하나의 JSON 배열(`[ ... ]`)이어야 합니다. 배열 내 각 요소가 한 줄씩 JSONL로 출력됩니다.
- 대용량 로그 파일을 JSONL에서 JSON 배열로 변환하면 `jq` 명령어나 각 프로그래밍 언어의 표준 JSON 배열 파서로 다루기 쉬워집니다.
자주 묻는 질문
여담 ― 왜 "한 줄에 하나의 레코드"라는 형식이 생겨났을까
JSON Lines(JSONL이라고도 함)라는 형식이 탄생한 배경에는, 일반적인 JSON 배열에는 "전체를 메모리에 읽어들여 파싱을 마칠 때까지 중간 결과 하나조차 꺼낼 수 없다"는 제약이 있었다는 점을 들 수 있습니다. 수백만 줄에 달하는 로그 데이터나 머신러닝 학습 데이터셋을 JSON 배열로 다루려면 파일 전체를 메모리에 펼쳐야 했고, 거대한 파일에서는 메모리 부족이나 파싱 시간 증가라는 문제가 발생했습니다.
JSON Lines는 이 문제를 "한 줄 = 하나의 완결된 JSON 객체"라는 단순한 제약으로 해결합니다. 파일을 한 줄씩 읽으면서 그때그때 파싱할 수 있기 때문에 파일 전체를 메모리에 읽어들일 필요가 없고, 스트림 처리·병렬 처리와 궁합이 매우 좋다는 특징이 있습니다. 이러한 설계 사상은 Unix 계열 운영체제의 전통적인 "한 줄에 하나의 레코드"라는 텍스트 처리 문화(`grep`·`awk`·`sed` 등의 명령어가 줄 단위로 동작하는 것)와도 친화성이 높아, 기존의 명령줄 도구들에 그대로 통합할 수 있다는 실용적인 장점도 크다고 여겨집니다.
오늘날에는 AI·머신러닝 분야의 데이터셋 배포 형식으로 널리 채택되어, 대규모 언어 모델의 학습 데이터나 파인튜닝용 프롬프트·응답 쌍 등이 JSON Lines 형식으로 배포되는 경우가 일반적입니다.