JSON 데이터 (.json)

RFC 표준

JavaScript Object Notation (JSON)은 데이터 교환을 위한 가볍고 사람이 읽기 쉬운 텍스트 형식으로, 완전히 언어 독립적이며 웹 API에서 보편적으로 사용됩니다.

JSON을(를) HTML(으)로 변환

무료 브라우저 내 JSON에서 HTML로 변환하는 도구입니다. 기기에서 파일을 즉시 변환할 수 있습니다.

JSON 온라인 압축

비공개 - 파일은 기기를 벗어나지 않습니다

검사 및 메타데이터

운영 체제와 파일 분석기는 파일 선두의 바이너리 바이트 시퀀스를 검사하여 JSON 파일을 식별합니다:

여기에 파일을 선택하거나 놓으십시오

비공개 - 파일은 기기를 벗어나지 않습니다

또는 붙여넣기 Ctrl+V
네트워크 전송 없음에 대한 개인정보 보호 보장: 외부 서버로 업로드된 데이터는 0바이트입니다. 모든 처리는 브라우저 샌드박스 내에서 로컬로 수행되었습니다.

바이트 단위 헤더 시그니처 (매직 바이트)

운영 체제와 파일 분석기는 파일 선두의 바이너리 바이트 시퀀스를 검사하여 JSON 파일을 식별합니다:

16진수 시그니처 (오프셋 0):

7B 또는 5B

ASCII 표현: { 또는 [

표준화: RFC 8259 / ECMA-404 / ISO/IEC 21778

기술 사양

컨테이너 아키텍처가볍고 텍스트 기반이며 언어 독립적인 데이터 교환 형식
압축Gzip / Brotli / Zstandard 텍스트 압축(일반적으로 80%-90% 압축률 달성)
바이트 엔디안UTF-8로 인코딩된 유니코드(BOM(Byte Order Mark)은 사용하지 않는 것을 권장)
색 공간해당 없음
채널 및 구조6가지 기본 데이터 형식: 객체, 배열, 문자열, 숫자, 불리언, null
최대 크기무제한; 파서 메모리 및 최대 문자열 길이에 의해서만 제한됨
투명도해당 없음
스트리밍 및 프로그레시브NDJSON (Newline Delimited JSON) / JSON Lines는 점진적인 스트림 처리를 가능하게 함

기술 비교 매트릭스: JSON 대 경쟁사

기술적 속성JSON (현재)YAMLXMLProtocol Buffers
구문 복잡성최소한 (6가지 형식, 엄격한 구문)높음 (들여쓰기 기반, 복잡한 사양)높음 (장황한 닫기 태그, 네임스페이스)스키마로 정의된 바이너리 와이어 형식
파싱 성능모든 최신 언어에서 극도로 빠름느림 (복잡한 들여쓰기 파싱)보통에서 느림 (무거운 DOM 구축)초고속 (제로 카피 바이너리 역직렬화)
주석 지원 여부아니요 (메타데이터 비대화를 방지하기 위해 의도적으로 제외됨)예 (# 주석)예 (<!-- 주석 -->).proto 파일에서 예
네트워크 페이로드 크기압축 텍스트 (매우 높은 gzip 압축률)간결한 텍스트장황한 텍스트 (무거운 태그 반복)초압축 바이너리

일반적인 손상 모드 및 헥스 복구 가이드

SyntaxError: JSON의 X 위치에 예기치 않은 , 토큰이 있습니다.

근본 원인: 배열이나 객체의 마지막 항목 뒤에 있는 후행 콤마로, RFC 8259 JSON에서 엄격히 금지됩니다.

복구: JSON.parse()에 전달하기 전에 객체 키와 배열 항목에서 후행 콤마를 제거하십시오.

SyntaxError: JSON에 예기치 않은 ' 토큰이 있습니다.

근본 원인: 큰따옴표("") 대신 작은따옴표('')로 감싼 문자열이나 키.

복구: 작은따옴표로 감싼 모든 문자열과 키를 표준 큰따옴표 문자열로 바꾸십시오.

보안 분석 및 파서 공격 벡터

JSON은 텍스트 전용이며 직접적인 코드 실행으로부터 안전하지만, 신뢰할 수 없는 JSON을 파싱하면 프로토타입 오염(Prototype Pollution), ReDoS 또는 메모리 고갈로 이어질 수 있습니다.

알려진 공격 벡터

  • 프로토타입 오염: 자바스크립트 응용 프로그램에서 Object.prototype을 수정하는 '__proto__' 또는 'constructor'라는 이름의 키.
  • 깊게 중첩된 JSON 구조를 통한 스택 오버플로 서비스 거부 공격 (예: 10,000개의 여는 괄호).
  • 숫자 정밀도 손실: 2^53 - 1 (9,007,199,254,740,991)보다 큰 자바스크립트 숫자는 정밀도가 조용히 손실됩니다.

방어적 모범 사례: eval()로 JSON을 절대 평가하지 마십시오. JSON.parse()를 사용하고 재귀 객체 병합 함수에서 “__proto__” 속성을 정화하십시오.

역사적 배경 및 주요 이력

2017RFC 8259는 UTF-8을 JSON의 유일한 필수 문자 인코딩으로 표준화했습니다.
2013ECMA-404는 여러 프로그래밍 언어와 플랫폼에서 사용하는 JSON 구문을 정의합니다.
2001더글러스 크락포드가 브라우저와 서버 간의 상태 없는 데이터 통신을 활성화하기 위해 JSON을 명세했습니다.

주요 장점

  • 사람이 읽기 쉽고, 자체 설명적이며, 간결한 텍스트 구조.
  • 자바스크립트 엔진 (JSON.parse) 및 모든 주요 프로그래밍 언어에 내장된 네이티브 파싱 지원.
  • 엄격한 사양으로 임의의 코드 실행 방지.

기술적 제한 사항 및 단점

  • 주석, 후행 콤마, 순환 객체 참조에 대한 지원 없음.
  • 네이티브 바이너리 형식 없음 (바이너리 데이터는 base64로 인코딩해야 하며, 크기가 33% 증가함).
  • Protocol Buffers나 MessagePack 같은 바이너리 형식에 비해 비효율적인 직렬화.

흥미로운 기술적 상식

  • 더글러스 크락포드는 원래의 JSMin JSON 도구에 '이 소프트웨어는 선을 위해 사용되어야 하며 악을 위해 사용되어서는 안 된다'는 소프트웨어 라이선스 조항을 추가했습니다.
  • JSON은 자바스크립트 구문의 엄격한 하위 집합이지만, ES2019 이전에는 이스케이프되지 않은 원시 U+2028 및 U+2029 문자가 JSON에서는 유효했으나 자바스크립트 문자열에서는 유효하지 않았습니다.
  • 더글러스 크락포드는 ECMAScript 5에 전용 JSON.parse() API가 표준화되기 전에 초기 웹 브라우저가 자바스크립트의 네이티브 eval()을 사용하여 JSON을 객체로 직접 평가할 수 있다는 것을 발견했습니다.

자주 묻는 기술 질문

JSON에서 주석을 허용하지 않는 이유는 무엇입니까?

JSON 문법은 주석을 허용하지 않습니다. 확장 기능과 앱별 데이터의 처리 방식은 구현마다 다를 수 있으므로 형식 자체만으로 상호 운용성이 보장되지는 않습니다.

정밀도를 잃지 않고 JSON에 64비트 정수를 저장하려면 어떻게 해야 합니까?

자바스크립트의 기본 Number 형식은 IEEE 754 배정밀도 부동소수점이며, 이는 2^53 - 1 이하의 정수만 정확하게 지원합니다. 데이터베이스 ID나 타임스탬프 같은 64비트 정수는 JSON에서 문자열 (예: '1234567890123456789')로 직렬화되어야 합니다.

JSON과 NDJSON/JSON Lines는 무엇이 다릅니까?

표준 JSON은 전체 페이로드를 단일 루트 객체나 배열로 감싸므로 파서가 평가하기 전에 전체 텍스트를 로드해야 합니다. 반면 NDJSON (Newline Delimited JSON)은 개별 유효한 JSON 레코드를 줄바꿈 문자(\n)로 구분하여, 수 기가바이트에 달하는 방대한 데이터셋을 메모리 효율적으로 한 줄씩 스트리밍할 수 있게 해줍니다.

관련 JSON 변환 쌍

JSON에서 HTML로

JSON 데이터를 HTML 소스로 변환하면 원시 구조화된 키-값 쌍이 브라우저 렌더링 준비가 된 사람이 읽을 수 있는 웹 문서로 변환됩니다.

HTML에서 JSON로

HTML 소스를 JSON 데이터로 변환하면 사람이 읽을 수 있는 웹 문서가 프로그래밍 방식 처리 및 API 수집을 위한 구조화된 키-값 쌍으로 변환됩니다.

SQL에서 JSON로

SQL 덤프 텍스트 스크립트를 JSON 데이터 내보내기로 변환하면 고정된 관계형 데이터베이스 테이블이 현대적인 웹 애플리케이션을 위한 유연한 중첩 객체로 바뀝니다.

JSON에서 SQLITE로

구조화되지 않은 JSON 텍스트 파일을 구조화된 SQLite 관계형 데이터베이스로 변환하면 대규모 데이터 레코드의 빠른 인덱싱과 쿼리가 가능해집니다.

ASE에서 JSON로

Adobe Swatch Exchange 파일을 컬러 JSON 구조로 변환하면 이진 디자인 팔레트가 최신 웹 응용 프로그램을 위한 읽기 쉬운 텍스트 개체로 바뀝니다.

JSON에서 ASE로

컬러 JSON 텍스트 데이터를 Adobe ASE 이진 견본으로 변환하여 웹 기반 디자인 토큰과 전문 데스크톱 레이아웃 응용 프로그램을 연결합니다.

GPL에서 JSON로

GIMP 팔레트 텍스트 파일을 색상 JSON 구조로 변환하면 웹 애플리케이션이 복잡한 구문 분석 스크립트 없이도 색상 견본을 직접 읽을 수 있습니다.

JSON에서 CSS로

구조화된 색상 JSON 파일을 CSS 변수로 변환하면 원시 데이터 개체가 웹사이트용 기본 스타일링 속성으로 변환됩니다.