MYMONDAY.ai
서비스스튜디오도구데이터·포맷73CSS 생성기19색상·이미지10인코딩·보안10웹·SEO11개발·데브옵스10파일·내보내기18계산기6가이드

JSONL 검증기

JSONL·NDJSON 파일에서 어느 줄이 유효한 JSON이 아닌지 정확히 찾아내고, 유효한 줄만 내보냅니다.

  • 브라우저에서 처리
  • 가입 없음
  • 무료

도구 작업 공간

예제

JSON Lines 입력

4줄134byte
모든 줄이 올바른 JSON입니다
레코드3
정상3
오류0
빈 줄0
valid-lines.jsonl
{"id":1,"event":"login","user":"ada"}
{"id":2,"event":"purchase","user":"grace","amount":19.9}
{"id":3,"event":"logout","user":"ada"}

JSON Lines는 NDJSON이라고도 부르며 한 줄에 완결된 JSON 값 하나를 저장합니다. 로그, 이벤트 스트림, 머신러닝 데이터셋, 대량 가져오기에 많이 쓰이는 이유입니다. 줄 하나만 깨져도 전체 가져오기가 실패할 수 있는데, 보통 나오는 오류는 끝부분 어딘가가 잘못됐다는 정도입니다. 이 검증기는 줄마다 따로 해석해서 어느 줄이 깨졌는지, 그 줄의 어디가 문제인지 알려 줍니다.

레코드, 정상, 오류, 빈 줄 수를 표시합니다. 잘못된 줄은 최대 500줄을 강조하고 처음 8개를 열 위치와 설명으로 나열하며 항목을 누르면 오류 위치로 이동합니다. 줄 바꿈으로 정렬된 JSON 문서이면 안내가 나옵니다. 정상 레코드로 JSONL과 JSON 배열 출력을 만듭니다.

텍스트는 브라우저 탭 안에만 있고 서버로 전송되지 않습니다. .jsonl, .ndjson, .json, .txt 파일을 최대 20MiB까지, 레코드 50,000개까지 붙여넣거나 끌어다 놓거나 열 수 있습니다.

사용 방법

  1. 붙여넣기, 끌어다 놓기, 파일 열기

    텍스트를 붙여넣거나 편집기에 파일을 끌어다 놓거나 파일 열기를 사용합니다. UTF-8 BOM은 무시하고 LF와 CRLF 줄바꿈 모두 처리합니다. 예제 칩으로 이벤트 로그, 중첩 레코드, 일부러 오류를 넣은 파일을 불러올 수 있습니다.

  2. 상태와 개수 확인

    배지에 모든 줄이 올바른 JSON이라는 메시지나 올바르지 않은 줄의 개수가 표시됩니다. 레코드는 빈 줄이 아닌 줄의 수이고, 정상·오류·빈 줄은 따로 셉니다. 마지막 레코드를 끝내는 줄바꿈은 빈 줄이 아닙니다.

  3. 깨진 줄 찾기

    편집기에 오류 줄을 최대 500개 표시합니다. 목록에는 처음 8개의 줄 번호와 오류가 나오고 항목을 누르면 해당 줄과 열로 이동합니다.

  4. 안내가 있으면 확인

    입력 전체가 줄바꿈으로 정렬된 JSON 객체나 배열 하나라면 줄마다 탓하는 대신 그렇다고 알려 줍니다. 줄 단위로 고치기보다 그 문서를 JSON Lines로 변환하세요.

  5. 유효한 줄 내보내기

    한 줄에 압축된 레코드 하나씩인 정상 줄(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]는 유효한 레코드입니다.

정상 파일을 JSON 배열로
입력
{"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개까지 받습니다.

마지막 업데이트: