1. JSON (JavaScript Object Notation)
ㅇ 자바스크립트에서의 객체 표기 방법을 기반으로 한 데이터 형식
- 다양한 형식의 구조화된 데이터를, 직렬화시킬 수 있는, 텍스트 포멧
. 각 데이터(토큰)를 `속성(Property)`과 `값(Vaule)`의 쌍으로 표현
ㅇ 비록 명칭에서 Javascript가 붙었지만,
- 자바스크립트 응용 이외에도, 다양한 응용 프로그램 또는 웹 서비스 또는 서버/클라이언트 간의
가벼운 데이터 교환에 이용됨
ㅇ 표준 : RFC 8259 (The JavaScript Object Notation (JSON) Data Interchange Format)
2. JSON 특징
ㅇ 문법이 직관적이고, 가벼움
ㅇ 원래는, 웹 서버와 웹 브라우저의 자바스크립트 간에 데이터 전송의 수단으로 쓰였음
ㅇ 현재는, 웹 상에서 구조화된 문서 교환을 위한 공통 포멧으로 정착되고 있음
- 폭넓은 언어 및 라이브러리에서 지원됨
3. JSON 데이터 형식/형태
※ 객체 리터럴 표기법을 기반으로 함
- 각 데이터(토큰)는, 콜론(:)으로 구분되는, `속성`과 `값`으로 구성 됨
ㅇ `속성`은, 콜론 좌측에 큰 따옴표(") 로 둘러싸인 문자열
- 작은 따옴표(') 사용 불가
ㅇ `값`은, 다음과 같은 종류들이 가능
- 문자열 : 큰따옴표(")로 둘러싸여 표현됨
- 숫자 : 그냥 숫자 자체로 표현됨
- 진리값 : true 또는 false
- null
- 배열 : 대괄호([ ])로 둘러싸이며, 각 요소는 쉼표(,)로 구분되어 표현됨
- 객체 : 중괄호({ })로 둘러싸여 표현됨
※ JSON 데이터(토큰) 사이사이에,
- 띄어쓰기,탭으로 보기 좋게 표현 가능하나, 주석과 같은 설명문 요소는 불가
4. JSON 데이터 처리를 위한 언어별 함수/메소드
ㅇ 자바스크립트 메소드
- objJS = parse(jsonString, function (key, value) { })
. jsonString : JSON 형식의 문자열 (객체 리터럴)
. key,value : 키,값의 쌍으로된 매개변수
. JSON 형식 데이터를 자바스크립트 객체 형식으로 반환
.. 즉, JSON 데이터를 자바스크립트 객체 그대로 사용이 가능
- jsonString = stringify(objJS)
. 자바스크립트 객체(objJS)를 JSON 형식의 문자열로 변환시켜 줌
ㅇ PHP 함수
- PHP 배열 = json_decode(jsonString)
- jsonString = json_encode(PHP 배열)
5. JSON 사용 例
ㅇ PHP
- 임의 형식의 데이터
. 객체 형식 例) aString = { "name1" : "value1" , "name2" : "value2" , ... }
. 배열 형식 例) aString = [ "name1" : "value1" , "name2" : "value2" , ... ]
- 임의 (객체 or 배열) 형식의 데이터 -> PHP 배열
. $arr = json_decode ( $aString );
- PHP 배열 -> JSON 형식의 데이터
. HTML 헤더 (server -> client)
<meta http-equiv='content-type' content='application/json'>
<meta charset='utf-8'>
. echo json_encode ( $arr, JSON_UNESCAPED_UNICODE );
ㅇ Javascript
- JSON 형식의 데이터(jsonString) -> 자바스크립트 객체(objJS)
. var objJS = JSON.parse ( jsonString );
- 자바스크립트 객체(objJS) -> JSON 형식의 데이터(jsonString)
. var jsonString = JSON.stringify ( objJS );
- ajax 호출 例 (client -> server)
$.ajax({
url: url,
type: 'POST',
contentType:'application/json',
dataType:'json',
data: JSON.stringify(obj),
success: function(result){
...
}
});
6. JSONP (JSON with Padding)
ㅇ (동일 출처 정책에 제한 받지 않음)
- 타 서버에 저장된 *.js 파일 내에,
- 자바스크립트 함수 내 인수로써 저장된 JSON 형식 데이터를 갖고 있으면서,
- 클라이언트에 정의된 동일 함수를 실행하면,
- 원격 타 서버에 있는 그 함수의 인수(파라미터)로써 데이터가 전달되는 구조
ㅇ 버튼 클릭 등 해당 이벤트가 발생하면,
- 타 서버의 스크립트를 가져오기 위한 script 요소를 생성하고,
- 원격 타 서버는 JSON 데이터를 포함한 함수 반환값을 클라이언트에 응답하면,
- 클라이언트는 그 반환값을 콜백함수에서 처리하는 형태