JSON 포맷과 유효성 검사
JSON이 보기 어렵다면 정리할 수 있지만, 문법이 틀렸다면 먼저 오류를 찾아야 합니다. 두 작업의 순서와 한계를 예제로 구분합니다.
포맷, 문법 검사, 스키마 검사는 서로 다릅니다
포맷은 파싱할 수 있는 입력을 다시 출력해 들여쓰기를 붙입니다. 문법 검사는 입력이 JSON 문법을 따르는지 확인합니다. 스키마 검사는 그다음에 필수 필드, 값의 자료형, API 계약처럼 데이터 자체의 규칙을 확인합니다.
예를 들어 {"age":"unknown"}은 문법상 JSON이지만 age에 숫자가 필요하다면 애플리케이션에서는 거부할 수 있습니다. 포맷 성공이나 문법 검사 성공만으로 데이터 규칙까지 통과했다고 판단하지 마세요.
오류를 읽는 데 필요한 문법만 살펴보기
객체는 중괄호 안의 이름과 값으로, 배열은 대괄호 안의 값들로 구성됩니다. 속성명과 문자열에는 큰따옴표를 쓰고, 이름과 값은 콜론으로, 항목은 쉼표로 구분합니다. 숫자, true, false, null도 값이 될 수 있습니다.
JSON에는 주석이나 마지막 항목 뒤의 쉼표가 없으며 작은따옴표는 문자열 구분자로 사용할 수 없습니다. JavaScript 객체 리터럴을 그대로 붙여넣으면 이 차이 때문에 실패하기 쉽습니다.
마지막 쉼표
잘못된 예
{"name":"Utilook",}수정한 예
{"name":"Utilook"}작은따옴표
잘못된 예
{'name':'Utilook'}수정한 예
{"name":"Utilook"}오류를 고치는 순서
파서가 가리킨 위치가 항상 실수한 문자 자체는 아닙니다. 빠진 쉼표나 괄호 때문에 그다음 토큰에서 오류를 발견할 수도 있습니다.
- JSON 유효성 검사에서 먼저 문법을 확인합니다.
- 행·열이 표시되면 해당 문자와 바로 앞의 따옴표·쉼표·괄호를 함께 봅니다. 위치가 없으면 파서 설명을 기준으로 앞뒤 구조를 점검합니다.
- 문법을 고친 뒤 다시 검사하고, 통과하면 JSON 포맷터로 중첩 구조를 정리합니다.
- 필수 필드나 자료형이 중요한 데이터라면 별도의 JSON Schema 또는 애플리케이션 검사를 수행합니다.
Utilook의 두 도구는 파서와 처리 위치가 다릅니다
JSON 유효성 검사는 브라우저의 JSON.parse를 사용합니다. 입력 JSON은 서버로 보내지 않으며, 성공한 검사 뒤에는 입력 내용이 없는 도구 실행 통계 요청만 전송합니다.
JSON 포맷터는 입력을 Utilook 서버로 보내 파싱하고 공백 2칸 또는 4칸으로 다시 출력합니다. 이 기능은 입력과 결과를 DB에 저장하지 않지만 민감한 데이터를 서버로 보내기 전에는 확인해야 합니다. 객체 키 정렬을 켜면 키 순서가 바뀌고, 다시 직렬화하면서 원본 표기가 달라질 수 있습니다.
현재 포맷터의 서버 파서는 NaN과 Infinity도 받아들입니다. 그러나 RFC 8259의 표준 JSON 값에는 포함되지 않습니다. 다른 시스템과 교환할 데이터라면 브라우저 검사기에서 문법을 먼저 확인하는 편이 안전합니다.