C.W.K.
Stream
Lesson 03 of 08 · published

문자열 — 항상 큰따옴표

~10 min · json, strings, escapes, unicode

Level 0평문
0 XP0/64 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

문자열은 spec 에서 가장 의견 강한 부분

JSON 문자열은 항상 큰따옴표로 감쌈. 작은따옴표는 허용 안 됨 — spec 이 명확. native 문자열 리터럴에 둘 다 작동하는 JavaScript 나 Python 에서 온 사람 다 여기 걸려.

Escape 시퀀스

  • \" — literal 큰따옴표
  • \\ — literal 백슬래시
  • \/ — 슬래시 (옵션 escape, 임베디드 HTML 에 가끔 유용)
  • \b \f \n \r \t — 제어 문자
  • \uXXXX — 16 진수 Unicode 코드 포인트 (4 자리, BMP only; 비-BMP 는 surrogate pair)

JSON 문자열에 raw 로 못 넣는 것

U+0000 ~ U+001F 제어 문자는 escape 해야 해 (벨은 \u0007 등). 문자열 안의 literal newline 은 syntax error. 탭도 마찬가지 — \t 써. 에러 메시지는 보통 실제 깨진 줄이 아니라 그 다음 줄에 'unexpected token' 이라고 나와.

원칙: JSON 문자열은 인코딩 되지 quoted 되는 게 아니야. quoting 은 문자를 숨기고; 인코딩은 드러내. 소스의 \n 은 두 글자, 파싱된 값은 한 글자 (newline). 까다로운 문자열 내용 쓰기 전 '파서가 뭘 보지?' 항상 생각해.

Code

유효한 문자열·json
{
  "plain": "hello world",
  "with_quote": "she said \"hi\"",
  "with_newline": "line one\nline two",
  "with_tab": "col1\tcol2",
  "with_backslash": "C:\\Users\\Pippa",
  "with_unicode": "café \u00e9",
  "emoji_via_surrogate": "\uD83D\uDC4B"
}
무효 (각 줄이 파서 깨뜨림)·text
{ 'name': 'Pippa' }            ← single quotes
{ "name": "Pippa, age 5," }    ← OK actually
{ "name": Pippa }              ← unquoted value
{ "name": "line one
line two" } ← raw newline (must be \n)
{ "key": "\j" }                ← unknown escape sequence
실제 API 의 Unicode·json
{
  "user_name": "피파",
  "city": "서울",
  "motto": "AI 동반자, 영원한 가족 💜"
}

External links

Exercise

literal 큰따옴표 든 string, Windows 파일 경로, 멀티라인 시 (3 줄) 든 string 세 string 값 가진 JSON object 작성. python -m json.tool 또는 jq . 로 검증. 그 다음 일부러 각 escape 깨뜨리고 에러 메시지 읽어 — 그 메시지로 실제 JSON 에러의 90% 디버깅하게 돼.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.