Javascript 와 JSON
자바스크립트를 처음부터 다시 공부해보려고 한다.
JSON 은 JavaScript Object Notation 의 약자이며, 데이터 형식이다.
JSON 은 더글라스 크록포드가 이전부터 쓰고 있던, 표기법을 2006년 RFC 4627 로 등록 하였고, RFC 7159 와 ECMA-404 라는 두 개의 경쟁 표준에 의해 기술되고 있다.
JSON 은 문자열 형태로 이루어져 있다.
각 프로그래밍 언어들은 표준에 맞게 JSON 을 파싱 하거나 직렬화 할 수 있다.
데이터 형식
JSON 은 다음 형식을 지원한다.
- 수(Number)
- 문자열(String)
- 참/거짓(Boolean)
- 배열(Array)
- 객체(Object)
- null(빈값)
배열과 객체는 값으로 6가지 형식을 모두 지원한다.
Number
-
으로 시작하거나, [0–9]
으로 시작해야 한다.
중간에 .
으로 실수를 표현할 수 있다.
e[+|-][0-9]
으로 지수를 표현할 수 있다.
8진수와 16진수 형식은 지원하지 않는다.
String
"
안에 둘러 싸인 Unicode 문자들의 조합이다.
이스케이프 문도 지원한다.
Boolean / null
true
, false
, null
은 그 자체로도 유요한 JSON 값이다.
Object
{
으로 시작하고 }
으로 끝나야 한다.
name:value
쌍으로 이루어져 있어야 하며 ,
으로 구분한다.
name 은 반드시 string 이어야 한다.
value 는 Number, String, Boolean, Array, Object, null 이 올 수 있다.
Array
[
으로 시작하고 ]
으로 끝나야 한다.
순서가 보장되는 값 으로 이루어져 있으며, ,
으로 구분한다.
값으로 Number, String, Boolean, Array, Object, null 이 올 수 있다.
데이터 타입
파일 확장자로 .json 확장자를 가진 단순 텍스트 파일에 저장할 수 있다.
MIME 타입은 application/json 이다.
JSON 객체
JSON 객체는 Global 객체 이다.
JSON 을 파싱 하거나 직렬화 하는 메서드를 가지고 있다.
JSON.parse
JSON 문자열의 구문을 분석하고, Number, String, Boolean, Array, Object, null 을 생성한다.
만약 JSON 에 어긋나는 문자열 형태라면 SyntaxError 가 발생한다.
JSON.parse(text, 변형할 함수) 함수를 추가할 수 있다.
JSON.stringify
값이나 객체를 JSON 문자열로 변환한다.
객체의 함수와 프로토타입, undefined 인 프로퍼티는 생략되어 JSON 문자열로 변환된다.
객체의 프로퍼티로 1 과 “1” 이 존재한다면, 하나는 무시된다.
심볼 키는 무시된다.
열거 불가능한 프로퍼티 들은 무시된다.
프로퍼티 가 number 로 이루어져 있을 경우 string 으로 변환된다.
'
은 쓰지 않으며 반드시 "
로 변환된다.
JSON.stringify( 값, replacer (허용할 프로퍼티) ) 에 JSON 으로 허용되는 프로퍼티만 추가할 수 있다.
replacer 값은 String 배열 과 Number 배열 혹은 함수 (key, value) => (value)
가 될 수 있다.
만약 replacer 값 이 없거나 null 이면, 모든 값이 반환된다.
JSON.stringify( 값, 허용할 속성, space ( 공백 ) )
JSON 문자열이 가독성 좋게 출력에 사용된다. Number 는 space 수를 나타내며, 1 ~ 10 으로 제한된다. String 이라면, 10개의 문자열 만 출력된다.
toJSON
만약 객체에 값이 함수 인 toJSON 속성이 있다면, JSON 객체는 해당 메서드를 이용하여, 반환 된 값을 직렬화한다.
이 대표적인 예로 Date 객체가 존재한다.
이외
Javascript 에서는 JSON 에 U+2028 LINE SEPARATOR와 U+2029 PARAGRAPH SEPARATOR 를 포함할 수 없지만, 다른 프로그램 엔진에서는 포함할 수 있다.
만약 JSON 객체가 없는 브라우저라면, 더글라스 포드만이 만든 JSON-js 을 이용할 수 있다.