이 튜토리얼은 JSON 문자열을 토큰으로 나누고 트리로 구성한 뒤 프로그램의 값으로 바꾸는 파서를 직접 만드는 과정을 설명한다. 대화형 위젯으로 각 단계를 살펴볼 수 있으며, 예제 코드는 Go로 작성됐지만 Go를 몰라도 흐름을 따라갈 수 있다고 안내한다.

JSON 파서는 세 단계로 작동한다. 먼저 문자를 읽어 토큰으로 묶는 어휘 분석기(lexer)가 공백을 건너뛰고 문자열·숫자·기호 등을 구분한다. 다음으로 파서(parser)가 토큰을 문법 규칙에 맞춰 트리로 만든다. 마지막으로 디코더(decoder)가 트리를 Go 값으로 변환한다.

JSON 값은 객체, 배열, 문자열, 숫자, 불리언, null의 여섯 종류다. 객체와 배열은 다른 값을 담을 수 있어 중첩 구조를 만든다. JSON 문자열은 큰따옴표를 써야 하고, 마지막 항목 뒤 쉼표와 주석은 허용하지 않는다. 숫자에는 앞자리 0을 붙일 수 없으며 NaN, Infinity, undefined도 JSON 값이 아니다.

튜토리얼은 토큰에 입력 위치와 오류 사유를 기록해 오류 메시지에 줄과 열을 표시하는 방법도 다룬다. 잘못된 입력은 어휘 분석기가 ILLEGAL 토큰으로 남기고, 파서는 문제 위치와 수정 힌트를 제시한다. 중첩 구조의 깊이를 추적해 10,000단계에서 파싱을 멈추며, 페이지의 위젯은 100단계에서 멈춘다.

Go 예제에서는 객체 멤버를 맵이 아닌 목록으로 보관해 중복된 이름을 보존하고, 숫자도 원문 텍스트로 저장해 자릿수를 잃지 않도록 한다. 이후 encoding/json과 같은 방식으로 값을 디코딩할 때는 중복 이름 중 마지막 값이 적용된다. 너무 큰 1e999는 구문상 유효하지만 float64 변환에서 오류가 나며, 12345678901234567890은 디코딩 과정에서 12345678901234567168이 된다.

직접 만들어 보려면 ECMA-404 표준을 참고하고, 토큰 종류와 어휘 분석기부터 작성한 뒤 문법 규칙마다 파서 함수를 두며 위치·원인·수정 방법을 알려주는 오류 메시지를 구현하라고 제안한다.