JSON Lines는 NDJSON이라고도 부르며 한 줄에 완결된 JSON 값 하나를 저장합니다. 로그, 이벤트 스트림, 머신러닝 데이터셋, 대량 가져오기에 많이 쓰이는 이유입니다. 줄 하나만 깨져도 전체 가져오기가 실패할 수 있는데, 보통 나오는 오류는 끝부분 어딘가가 잘못됐다는 정도입니다. 이 검증기는 줄마다 따로 해석해서 어느 줄이 깨졌는지, 그 줄의 어디가 문제인지 알려 줍니다.
레코드, 정상, 오류, 빈 줄 수를 표시합니다. 잘못된 줄은 최대 500줄을 강조하고 처음 8개를 열 위치와 설명으로 나열하며 항목을 누르면 오류 위치로 이동합니다. 줄 바꿈으로 정렬된 JSON 문서이면 안내가 나옵니다. 정상 레코드로 JSONL과 JSON 배열 출력을 만듭니다.
텍스트는 브라우저 탭 안에만 있고 서버로 전송되지 않습니다. .jsonl, .ndjson, .json, .txt 파일을 최대 20MiB까지, 레코드 50,000개까지 붙여넣거나 끌어다 놓거나 열 수 있습니다.
사용 방법
붙여넣기, 끌어다 놓기, 파일 열기
텍스트를 붙여넣거나 편집기에 파일을 끌어다 놓거나 파일 열기를 사용합니다. UTF-8 BOM은 무시하고 LF와 CRLF 줄바꿈 모두 처리합니다. 예제 칩으로 이벤트 로그, 중첩 레코드, 일부러 오류를 넣은 파일을 불러올 수 있습니다.
상태와 개수 확인
배지에 모든 줄이 올바른 JSON이라는 메시지나 올바르지 않은 줄의 개수가 표시됩니다. 레코드는 빈 줄이 아닌 줄의 수이고, 정상·오류·빈 줄은 따로 셉니다. 마지막 레코드를 끝내는 줄바꿈은 빈 줄이 아닙니다.
깨진 줄 찾기
편집기에 오류 줄을 최대 500개 표시합니다. 목록에는 처음 8개의 줄 번호와 오류가 나오고 항목을 누르면 해당 줄과 열로 이동합니다.
안내가 있으면 확인
입력 전체가 줄바꿈으로 정렬된 JSON 객체나 배열 하나라면 줄마다 탓하는 대신 그렇다고 알려 줍니다. 줄 단위로 고치기보다 그 문서를 JSON Lines로 변환하세요.
유효한 줄 내보내기
한 줄에 압축된 레코드 하나씩인 정상 줄(JSONL)과 JSON 배열 중에서 고릅니다. 텍스트를 복사하거나
valid-lines.jsonl,records.json으로 내려받습니다.
작동 원리
JSON Lines의 조건
JSON Lines 규약(jsonlines.org)과 NDJSON은 같은 것을 가리킵니다. 줄마다 완결된 JSON 값이 하나씩 있고 줄바꿈(LF)으로 구분되는 UTF-8 텍스트라서, 읽는 쪽이 한 줄씩 처리할 수 있습니다. 값이 객체일 필요는 없어서 42, "text", null, [1,2]도 모두 유효한 레코드입니다.
빈 줄은 레코드가 아닙니다. 이 도구는 빈 줄을 따로 세고 출력에서는 뺍니다. 빈 줄을 거부하는 소비자가 있기 때문입니다. {"a":1}{"b":2}처럼 한 줄에 값이 둘이면 유효하지 않고, 값 하나가 여러 줄에 걸쳐 있어도 마찬가지입니다.
| 줄 | 결과 |
|---|---|
| {"id":1} | 유효한 레코드 |
| 42 | 유효한 레코드(어떤 JSON 값이든 허용) |
| (비어 있거나 공백만 있음) | 빈 줄, 개수만 세고 레코드는 아님 |
| {"a":1,} | 오류: 마지막 쉼표 |
| {"a":1}{"b":2} | 오류: 첫 값 뒤에 내용이 남음 |
| {'a': 1} | 오류: 작은따옴표 |
줄을 검사하고 보고하는 방식
각 줄은 JSON 포매터와 같은 엄격한 파서로 검사하므로 메시지도 같습니다. 마지막 쉼표, 작은따옴표, 따옴표 없는 키, 도중에 끝난 줄 등이 구분됩니다. 메시지에는 입력 전체 기준의 실제 줄 번호(예: 5행 9열)가 나오며, 열은 깨진 줄 안에서 센 값입니다.
모든 오류 줄을 세지만 편집기는 최대 500줄을 표시하고 상세 정보는 처음 200개를 보관합니다. 목록에는 처음 8개가 나옵니다. 추가 개수는 전체 오류 줄에서 8개를 뺀 값으로 강조·상세 정보 한도 밖의 줄도 포함하므로 일부 줄은 강조되지 않습니다. 50,000개를 넘는 레코드는 일부만 검사하지 않고 거부합니다.
두 출력의 내용
두 출력 모두 유효한 줄만 담습니다. 정상 줄(JSONL)은 한 줄에 압축된 레코드 하나씩, JSON 배열은 공백 2칸으로 들여쓴 배열입니다. 올바르지 않은 줄은 고치지 않고 버립니다.
내보낼 때 값은 유지됩니다. 숫자 표기는 쓴 그대로 유지되고(9007199254740993, 1.10, 1e2), 키 순서도 그대로이며(정수형 키가 앞으로 가지 않음) 반복된 키도 두 항목이 모두 남습니다. 문자열 안의 U+0085, U+2028과 U+2029는 \u0085, \u2028, \u2029로 써서 내보냅니다. 일부 줄 분리기가 이 문자를 줄바꿈으로 취급해 파일을 망가뜨리기 때문입니다.
실제 예시
{"id":1}
{"id":2,
[1,2]
not json
"str"레코드: 5 · 정상: 3 · 오류: 2 · 빈 줄: 1
2행: JSON이 너무 일찍 끝났습니다(2행 9열). 큰따옴표로 감싼 속성 이름이(가) 와야 합니다.
5행: 5행 1열에 예상하지 못한 n이(가) 있습니다. 값이(가) 와야 합니다.개수와 목록입니다. 빈 줄은 세지만 레코드는 아닙니다. 2행은 도중에 끝났고 5행은 JSON이 아닙니다. 줄 번호는 입력 전체 기준이고 열은 줄 안에서 센 값입니다.
{
"a": 1,
"b": 2
}레코드: 4 · 정상: 0 · 오류: 4 · 빈 줄: 0
1행: JSON이 너무 일찍 끝났습니다(1행 2열). 큰따옴표로 감싼 속성 이름이(가) 와야 합니다.
2행: 2행 6열에서 JSON이 끝난 뒤 내용이 더 있습니다. 줄마다 값이 하나씩이라면 JSON Lines입니다.
3행: 3행 6열에서 JSON이 끝난 뒤 내용이 더 있습니다. 줄마다 값이 하나씩이라면 JSON Lines입니다.
4행: 4행 1열에 예상하지 못한 }이(가) 있습니다. 값이(가) 와야 합니다.
참고: 줄 바꿈으로 정렬된 JSON 문서 하나로 보입니다. JSON Lines는 한 줄에 완결된 값 하나가 있어야 합니다. JSON → JSONL 변환기를 사용하세요.모든 줄이 각각 실패하므로 JSON Lines가 아니라 JSON 문서 하나라는 안내가 나옵니다.
{"a":1}{"b":2}
{"a":1,}
[1,2]레코드: 3 · 정상: 1 · 오류: 2 · 빈 줄: 0
1행: 1행 8열에서 JSON이 끝난 뒤 내용이 더 있습니다. 줄마다 값이 하나씩이라면 JSON Lines입니다.
2행: 2행 7열의 쉼표가 마지막 항목 뒤에 남아 있습니다. JSON은 } 또는 ] 앞의 쉼표를 허용하지 않습니다.1행은 8열에 남은 내용이 있고 2행은 7열에 마지막 쉼표가 있습니다. [1,2]는 유효한 레코드입니다.
{"id":1,"name":"Ada"}
{"id":2,"tags":["x","y"]}
[
{
"id": 1,
"name": "Ada"
},
{
"id": 2,
"tags": [
"x",
"y"
]
}
]JSON 배열 탭의 출력입니다. CRLF 줄바꿈도 받아들이며 마지막 줄바꿈은 빈 줄로 세지 않습니다.
{"id":9007199254740993,"p":1.10,"2":1,"b":2}
{"a":1,"a":2}
42
{"id":9007199254740993,"p":1.10,"2":1,"b":2}
{"a":1,"a":2}
42정상 줄(JSONL) 탭의 출력입니다. 빈 줄은 빠지고, 2^53+1과 1.10은 쓴 그대로 남으며, 키 "2"는 제자리에 있고 반복된 a도 두 항목이 모두 남습니다.
자주 하는 실수
줄바꿈으로 정렬된 JSON 파일은 JSON Lines가 아님
여러 줄에 걸친 문서는 줄마다 오류가 납니다(
{하나는 값이 아닙니다). 그런 입력이면 오류가 쏟아지는 대신 안내가 나오니, JSON → JSONL 변환 도구로 문서를 변환하세요.한 줄의 객체 두 개는 오류
{"a":1}{"b":2}는 값 뒤에 내용이 남아 8열에서 오류가 납니다. 레코드 사이에 줄바꿈을 넣으세요.값을 보존하고 문자열 이스케이프를 정리함
숫자 표기, 키 순서, 반복된 키는 쓴 그대로 유지됩니다. 줄마다 압축하거나 배열을 공백 2칸으로 들여쓰며, 문자열은 표준 이스케이프를 쓰고 유니코드 줄 구분 문자도 이스케이프합니다. 반복된 키는 JSON 문법상 오류가 아니라서 보고되지 않지만, 많은 해석기는 그중 한 값만 남깁니다.
파이썬·자바스크립트 리터럴은 JSON이 아님
print(dict)로 만든 덤프는 작은따옴표와True,False,None을 쓰고, 자바스크립트 객체 리터럴에는 따옴표 없는 키나undefined가 있을 수 있습니다. 이런 줄은 모두 오류로 보고됩니다. 파일은json.dumps나JSON.stringify로 쓰세요.깨진 줄은 여덟 개만 목록에 나옴
오류가 수천 개인 파일은 처음 여덟 줄만 목록에 나오고 편집기에는 최대 500줄이 강조됩니다. 앞의 것을 고치면 다음 것이 목록으로 올라오며, 쉼표 누락 같은 반복되는 패턴이 보통 전부를 설명합니다.
레코드 50,000개 초과는 거부
그 한도를 넘으면 일부만 세지 않고 오류를 표시합니다.
split -l 50000등으로 파일을 나눠서 각각 검사하세요.
자주 묻는 질문
JSONL과 NDJSON은 무엇이 다른가요?
실제로는 같습니다. 둘 다 줄바꿈으로 구분한, 줄마다 JSON 값 하나라는 뜻입니다. 확장자는 보통 .jsonl이나 .ndjson이며 이 도구는 둘 다 받습니다.
모든 줄이 객체여야 하나요?
아니요. 객체, 배열, 문자열, 숫자, true, false, null 등 어떤 JSON 값이든 유효한 레코드입니다.
빈 줄도 오류인가요?
아니요. 빈 줄은 따로 세고 출력에서는 뺍니다. 마지막 레코드를 끝내는 줄바꿈은 빈 줄로 세지 않습니다.
오류의 정확한 위치는 어떻게 찾나요?
목록 항목을 누르면 해당 줄과 열로 이동합니다. 오류 개수가 더 많아도 강조는 500줄까지입니다.
줄 번호는 입력 전체 기준인가요?
네. 목록과 메시지 모두 5행 9열처럼 입력 전체 기준의 실제 줄 번호를 알려 줍니다. 열은 깨진 줄 안에서 센 값입니다.
유효한 줄만 내보낼 수 있나요?
네. 정상 줄(JSONL)은 한 줄에 압축된 레코드 하나씩, JSON 배열은 JSON 배열을 줍니다. 숫자, 키 순서, 반복된 키는 쓴 그대로 유지됩니다. valid-lines.jsonl, records.json으로 내려받을 수 있습니다.
파일이 업로드되나요?
아니요. 해석과 검증은 브라우저 탭 안에서 이루어집니다. 최대 20MiB, 레코드 50,000개까지 받습니다.
마지막 업데이트:
