도구 사용 FAQ: 데이터, 파일, 내보내기
데이터가 업로드되는지, 얼마나 큰 파일이 동작하는지, 로컬에 무엇이 저장되는지, 중국어가 왜 이스케이프로 바뀌는지: 온라인 JSON 도구의 실제 경계를 설명하는 열 가지 질문.
이 사이트의 도구와 JSON 명세에 관해 가장 자주 묻는 질문을 시나리오별로 묶고, 모호한 결론 대신 바로 행동할 수 있는 답을 제공합니다.
25개 문서데이터가 업로드되는지, 얼마나 큰 파일이 동작하는지, 로컬에 무엇이 저장되는지, 중국어가 왜 이스케이프로 바뀌는지: 온라인 JSON 도구의 실제 경계를 설명하는 열 가지 질문.
주석이 허용되는지, 후행 쉼표가 왜 오류인지, 키에 따옴표가 필요한지, 9007199254740993이 왜 바뀌는지 — 열두 가지 결론을 각각 RFC 8259로 확인합니다.
경로 쿼리에 JSONPath를 쓸지 Pointer를 쓸지, Patch와 Merge Patch를 어떻게 고를지, Schema가 무엇을 막을 수 있는지, 초안 버전을 어떻게 고르는지 한 번에 설명합니다.
수십 MB JSON 파일이 왜 열리지 않는지, 딥 복제가 얼마나 비싼지, __proto__ 오염을 어떻게 막는지, XSS가 어디서 들어오는지 — 증상별로 정리한 열 가지 응급 결론.
이름 스타일, 시간 형식, null 의미, 열거 모양, 설정 형식, 픽스처 조직, 병합 충돌 — 팀이 진짜로 다투는 열두 가지 절충입니다.
RFC 8259에는 주석 문법이 없어 `//`와 블록 주석이 있으면 `JSON.parse`가 던집니다. JSON5나 JSONC, `_comment` 필드, Schema description, 또는 YAML을 쓰세요.
후행 쉼표는 JavaScript 객체 리터럴에서는 합법이고 JSON에서는 치명적입니다. 정확한 오류, 원인이 되는 RFC 8259 문법, 실제로 유효한 세 가지 수정을 설명합니다.
UTF-8 BOM은 보이지 않는 세 바이트라 `JSON.parse`가 첫 문자에서 실패하고 1행 1열을 보고해 파일이 비어 있거나 잘린 것처럼 보입니다.
JSON에는 십진수 리터럴만 있습니다. JSON.stringify가 NaN과 Infinity를 경고 없이 null로 바꾸므로 "숫자 필드가 때때로 null"이 운영에서 계속 나타납니다.
2^53-1을 넘는 정수는 JSON.parse에서 정밀도를 잃습니다. 스노우플레이크 ID, 주문 번호, 데이터베이스 bigint 모두 여기 부딪히므로 문자열로 끝까지 유지하세요.
\u4e2d\u6587 이스케이프는 합법적인 Unicode이지 인코딩 실패가 아닙니다. 진짜 깨짐은 다르게 생겼고, 둘을 구분하는 것이 실제로 고칠 것을 결정합니다.
엄격한 상위 집합 순서: JSONC는 주석을 더하고, JSON5는 작은따옴표, 따옴표 없는 키, 후행 쉼표, 16진수를 더합니다. 잘못 고르면 에디터가 아니라 API가 깨집니다.
JSON은 중괄호로, YAML은 들여쓰기로 구분합니다. 기계에는 JSON, 사람이 설정을 편집할 때는 YAML입니다. 주석, 앵커, 다중 문서 구조는 변환에서 살아남지 않습니다.
JSON Pointer는 키로 저장할 수 있는 유일한 주소이고 JSONPath는 쿼리 언어입니다. 잘못 쓰면 설정 업데이트가 깨지거나 망가진 JSONPath를 재발명합니다.
Schema는 구조와 타입을 다스리지 업무 의미를 다스리지 않습니다. 필드 누락, 타입 오류, 범위 밖 열거를 막고, 금액이 0 초과 같은 규칙은 코드에 남습니다.
2020-12가 현재이고 $defs, prefixItems, unevaluatedProperties를 더하지만 많은 도구가 여전히 draft-07만 말합니다. 전체 도구 체인이 지원하는 것으로 고르세요.
json-schema-to-typescript와 quicktype은 한 명령으로 .d.ts를 내지만 초안일 뿐입니다. 선택성, 유니언, additionalProperties, 날짜는 사람이 손봐야 합니다.
잘못된 순서로 최적화하면 라이브러리 교체가 모두 무용합니다. 네트워크, 파싱, 렌더를 따로 측정한 뒤 파싱을 줄이고, 페이로드를 줄이며, 스트리밍하세요.
JSON.parse는 __proto__를 평범한 키로 처리하고, 손상은 Object.prototype에 쓰는 재귀 병합에서 일어나 모든 객체가 공격자 속성을 상속합니다.
JSON은 스스로 실행되지 않습니다. XSS는 이를 HTML로 취급하는 순간 일어납니다. 서버 측 문자열 연결, 프런트엔드 innerHTML, 또는 JSON을 스크립트 태그에 직접 인라인할 때입니다.
프라이버시 정책을 읽을 필요가 없습니다. 네트워크 패널을 열고, 페이지를 오프라인으로 시험하고, 새로고침해 무엇이 남았는지 보세요. 2분, 세 가지 검사, 신뢰가 필요 없습니다.
고정 한도는 없고 제약은 탭의 메모리 예산입니다. 20MB 파일은 파싱 후 대개 60~100MB가 되고, 하이라이팅된 DOM이 그걸 다시 두 배로 키울 수 있습니다.
맨 객체는 메타데이터가 필요할 때까지 깔끔하고, 완전한 봉투는 안전하지만 장황합니다. 대부분 프로젝트에는 결과에 HTTP 상태를, 데이터에 안정적 봉투를 쓰세요.
Epoch 숫자와 ISO 문자열은 각자 절충이 있지만, 실제로 깨뜨리는 것은 둘을 섞는 것입니다. 오프셋이 있는 ISO 8601을 쓰고, UTC로 저장하며, 사용자 시간대로 렌더하세요.
`null`은 필드가 존재하지만 값이 없다는 뜻이고, 생략은 필드가 존재하지 않는다는 뜻입니다. PATCH 본문, 설정 병합, 폼 미리 채우기에서 차이가 물립니다.