본문으로 건너뛰기
AZ Tools

JSON Lines (NDJSON) 뷰어

.jsonl/.ndjson 파일 붙여넣기·드롭 → 레코드 테이블 보기, field:value로 필터, 유지할 컬럼 선택, JSON/CSV 재출력.

사용법

  1. 줄 붙여넣기 또는 .jsonl/.ndjson 파일 드롭. 테이블 자동 표시.
  2. field:value(부분 문자열 매치) 또는 일반 텍스트(JSON 어디든 매치)로 필터.
  3. 두 번째 박스에서 유지할 컬럼 선택 — 비우면 발견된 모든 키 표시.

자세한 설명

펼치기

JSON Lines는 NDJSON이라고도 하며, 한 줄에 JSON 값 하나를 담는 형식입니다. 스트리밍 로그, 머신러닝 데이터셋, tail로 따라 읽는 파이프라인이 정착한 형식이죠. 이 뷰어는 각 줄을 독립적으로 파싱하므로 잘못된 레코드 하나가 파일 전체를 망치지 않습니다. 파싱된 표가 나오고, 그와 별개로 잘못된 줄들이 각각의 파서 오류 메시지와 함께 나옵니다. field:value 필터로 내용을 좁힐 수 있고 최상위 키뿐 아니라 nested.path도 받으며, 열 선택기로 다시 내보낼 때 원하는 필드만 남길 수 있습니다.

이 형식이 존재하는 이유는 JSON 배열에는 이어 붙일 수 없기 때문입니다. [...]에 레코드를 하나 더하려면 닫는 대괄호를 다시 써야 하므로, 쓰다가 죽은 프로그램은 어떤 파서도 손대지 않을 파일을 남깁니다. 게다가 읽는 쪽은 첫 원소를 보기도 전에 배열 전체를 메모리에 올려야 합니다. 한 줄에 값 하나는 이 셋을 모두 해결합니다. 한 줄 쓰면 추가가 되고, 마지막 미완성 줄을 버리면 복구가 되며, 100기가바이트짜리 파일도 한 줄씩 처리할 수 있습니다.

줄 단위로 자르는 것이 단순한 편의가 아니라 안전한 방법이 되는 근거는 JSON 문법 자체의 규칙입니다. 문자열 안에는 실제 줄바꿈 문자가 절대 들어갈 수 없습니다. 값 안의 개행은 \n이라는 두 글자로 적어야 하므로, 올바른 문서에 등장하는 개행은 오직 레코드 경계일 수밖에 없습니다. 따라서 개행으로 자르는 것은 어림짐작이 아니라 정확한 방법입니다. CSV는 그렇지 않습니다. 따옴표로 감싼 필드 안에 진짜 줄바꿈이 들어갈 수 있어서, 단순히 줄로 자르면 행이 조용히 망가집니다.

이런 파일을 쓸 때 지켜야 할 관례가 둘 있습니다. 인코딩은 UTF-8이고 그 외에는 없습니다. UTF-16이나 Latin-1으로 내보낸 파일은 로컬에서 아무리 유효한 JSON처럼 보여도 서로 통하지 않습니다. 그리고 각 줄은 그 자체로 완결된 값이어야 합니다. 들여쓴 예쁜 출력은 이 형식이 정확히 금지하는 것입니다. 들여쓴 객체는 여러 줄에 걸치고, 그 줄 하나하나는 단독으로는 유효하지 않기 때문입니다. 파일이 어디서도 열리지 않는다면 이것부터 확인하면 대개 설명이 됩니다. 모든 처리는 브라우저에서 이뤄지며 아무것도 업로드되지 않습니다.

자주 묻는 질문

손상 줄은 어떻게 됨?

줄 번호와 JSON 파싱 오류와 함께 하단에 리스트. 손상 줄 양쪽 유효 줄은 정상 파싱·표시.

중첩 필드 필터 가능?

응 — user.email:alice 또는 events.0.type:login 같은 점 경로 사용. 경로는 객체·배열 둘 다 워크.

로그나 데이터셋이 JSON 배열 대신 JSON Lines를 쓰는 이유는?

한 줄에 객체 하나인 파일은 문서 전체를 파싱하지 않고도 이어 붙이고, 쪼개고, 평범한 줄 단위 도구로 읽을 수 있기 때문이다. 고장 나는 방식도 온건하다. 쓰는 도중에 죽으면 마지막 줄만 손상되지만, 잘린 JSON 배열은 첫 바이트부터 읽을 수 없다. 하루 종일 자라는 로그나 학습 데이터에 딱 맞는 성질이다.

표에 대부분의 레코드에는 없는 열이 보인다. 정상인가?

정상이다. JSON Lines의 레코드는 서로 독립적이라, 표는 등장한 모든 키의 합집합이 되고 해당 키가 없는 레코드는 빈 칸으로 보인다. 필드가 시간이 지나며 바뀐 이벤트 로그에서는 흔한 모양이다. 그리고 어떤 필드로 거르거나 정렬하면, 실제로 그 필드를 가진 레코드에만 적용된다는 뜻이기도 하다.

관련 도구