문자열은 spec 에서 가장 의견 강한 부분
JSON 문자열은 무조건 큰따옴표로 감싸. 작은따옴표는 아예 안 돼. spec 이 그 부분만큼은 딱 잘라 말해. 자기 언어에서는 둘 다 되는 JavaScript 나 Python 쪽 사람이면 열에 아홉은 여기서 한 번 걸려.
Escape 시퀀스
\"— literal 큰따옴표\\— literal 백슬래시\/— 슬래시 (옵션 escape, 임베디드 HTML 에 가끔 유용)\b \f \n \r \t— 제어 문자\uXXXX— 16 진수 Unicode 코드 포인트 (네 자리, BMP 범위만. BMP 밖은 surrogate pair 로 써)
JSON 문자열에 raw 로 못 넣는 것
U+0000 부터 U+001F 까지 제어 문자는 반드시 escape 해야 해 (벨 문자면 \u0007 이런 식으로). 문자열 안에 줄바꿈을 그대로 넣으면 문법 오류가 나. 탭도 마찬가지라 \t 로 써야 하고. 에러 메시지는 보통 실제로 깨진 줄이 아니라 그 다음 줄을 가리키면서 'unexpected token' 이라고 나와.
원칙: JSON 문자열은 따옴표로 가려두는 게 아니라 인코딩 하는 거야. 따옴표는 문자를 감추지만 인코딩은 문자를 드러내. 소스에 적힌
\n 은 두 글자고, 파싱된 값은 줄바꿈 한 글자야. 까다로운 문자열을 쓰기 전에는 늘 '파서 눈에는 뭐가 보이지?' 를 먼저 생각해.