JSON에서 숫자는 0으로 시작하면 안된다.

Tekiter·2022년 6월 5일
2

친구의 질문을 받아주다가 이런 내용이 나왔다.

JSON에서 숫자를 0123 으로 쓰면 에러가 나고 123으로 쓰면 에러가 안나!

처음 안 사실이었고, 왜 그런지 찾아보았다.

JSON.org 사이트의 오른쪽에서 JSON 문법의 McKeeman Form을 찾아 볼 수 있었다.

McKeeman Form is a notation for expressing grammars. It was proposed by Bill McKeeman of Dartmouth College. It is a simplified Backus-Naur Form with significant whitespace and minimal use of metacharacters.

McKeeman Form이란 BNF의 간소화 된 버전이라고 한다.

해당 McKeeman Form에서 number의 정의는 다음과 같다.

number
	integer fraction exponent

interger fraction exponent 순서로 배치가 되야 한다.

integer의 정의는 다음과 같다.

integer
  digit
  onenine digits
  '-' digit
  '-' onenine digits

digit, onenine + digits, "-" + digit, "-" + onnine + digits 이 4가지 중 하나로 정의되어 있다.

그리고 digits의 정의는 다음과 같이 digit 한글자 또는 digit + digits 이므로 임의 갯수의 digit이다.

digits
  digit
  digit digits

digit의 정의는 다음과 같이 '0' 이거나 onenine 이다.

digit
  '0'
  onenine

onenine의 정의는 다음과 같이 '1' 에서 '9' 까지이다.

onenine
	'1' . '9'

이 모든걸 종합해보면 JSON에서 integer는 0부터 9까지의 한글자 또는 1부터 9까지의 한글자와 그 뒤에 이어지는 0부터 9까지의 여러 글자들과, 이 둘 앞에 '-'를 붙인 문자열만 허용한다. 따라서 JSON의 문법 정의 상 0123 같은 토큰은 올바른 숫자로 인식되지 않는다.

1개의 댓글

comment-user-thumbnail
2023년 1월 16일

설명이 너무 좋아요! 👏🏻

답글 달기