본문 바로가기

프로그래밍 정보

[정보] 제이슨(Json)이란

▣ 제이슨(Json)이란? (JavaScript Object Notation)

: Json(JavaScript Object Notation)은 인터넷에서 자료를 주고받을 때 그 자료를 표현하는 방법입니다. 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합합니다. 그 형식은 자바스크립트이 구문을 따르지만, 프로그래밍 언어나 플랫폼에 독립적이므로 C, C++, C#, 자바, 자바스크립트, 펄, 파이썬 등 많은 언어에서 이용할 수 있습니다.


JSON 문법은 자바스크립트 표준인 ECMA-262 3판의 객체 문법에 바탕을 두며, 인코딩은 유니코드로 한다. 표현할 수 있는 기본 자료형으로는 수, 문자열, 참/거짓, null이 있고, 집합 자료형으로는 배열과 객체가 있다.


-. 의미 그대로 자바스크립트 객체 표기법이다.

-. 이존 언어 사이의 데이터 전달에 많이 사용된다.


1. 표현 방식 

-. VARIABLE = '{"KEY" : "VALUE"};

: 연관배열이라고 생각하면 된다.


2. 함수

-. json_encode()

: 인덱스배열을 연관배열 형태로 변형시켜준다.


-. json_decode()

: 연관배열을 인덱스배열 형태로 변형 시켜준다.


*연관배열로 만든 배열을 json_decode()로 변형시킨 경우 원래의 인덱스배열 형태와 다를 수 있다. 너무 당연하다.


3. 활용 방향

-. jQuery + Web(Ajax)

: 이건 가장 많이 사용되는 형태로 웹베이스로 작업할 때 굿이다. 한글을 사용할땐 UTF-8로 변환해서 사용한다.

-. Mobile(IOS, Android) + Server

: 최근 많이 사용되는 형태로 모바일앱에서 서버에 요청한 값을 리턴받을 때 json 형태로 리턴하다.



※ 참고

RegExp(정규식)과 같이 반드시 알아야 하는 것은 아니다. 엄청난 문자열 if, switch문을 작성하기 전 RegExp 한줄이면 조건식이 끝. json도 마찬가지다. 배열을 이종 언어에 띄워보낼때 여러 방법을 생각해 보겠지만 json을 써버리면 그딴 고민 끝



▣ Object(객체)

-. object는 name/value 쌍들이 비 순서화된 Set 입니다.

-. object는 {} 중괄호로 시작과 끝을 나타냅니다.

-. 각 name 뒤에 :(colon)을 붙이며, ',(comma)'로 name/value 쌍들 간을 구분합니다.

-. 이름은 문자열이기 때문에 반드시 따옴표를 하며, 값은 기본 자료형이거나 배열, 객체 입니다.

-. 각 쌍이 나오는 순서는 의미가 없으며 ','로 구분합니다.


예제)

{"name2":50, "name3": "값3", "name1": true}


아래 처럼 이름에 따옴표를 쓰지 않아도 되지만 문자와 숫자를 구분하기 위해 써주는 것이 좋습니다.


{name2: 50, name3: "값3", name1:true}


▣ Array

-. array의 값은 순서화된 collection입니다. 따라서 각 요소가 나타내는 순서에 의미가 있습니다.

-. array는 [] bracket(대괄호)으로 시작과 끝을 나타냅니다.

-. ',(comma)'로 array의 값을 구분합니다.

-. 배열의 각 요소는 기본자료형이나 배열, 객체입니다.


예제)

[10, {"v":20}, [30, "마흔"]]


※ 참고

JSON 메시지 단위는 배열이나 객체입니다. 따라서 그냥 예제로는 JSON 메시지가 될 수 없습니다. 다음은 한 사람에 대한 정보를 갖는 JSON 객체입니다.


{

"이름": "소지섭",

"나이": 32,

"성별": "남",

"주소": 서울특별시 강남구 삼성동",

"특기":["농구", "야구"].

"가족관계":{"#":2, "아버지": "정회장", "어머니": "이여사"},

"회사": 서울 특별시 강남구 역삼동"

}



▣ Value

-. 큰 따옴표(") 안에 string, number, object, array, true, false, null이 올 수 있습니다. 이런 구조를 포함합니다.


▣ String

-. 큰 따옴표 안에 둘러 쌓여 zero 이상의 Unicode(유니코드) 문자들의 조합입니다.



▣ JSON 장점

-. 텍스트로 이루어져 있으므로, 사람과 기계 모두 읽고 쓰기 쉽습니다.

-. 프로그래밍 언어와 플랫폼에 독립적이기 때문에 서로 다른 시스템 간에 객체를 교환하기 좋습니다.

-. 자바스크립트의 문법을 채용했기 때문에 자바스크립트에서 eval명령으로 사용가능 합니다.

-. 이런 특성은 자바스크립트를 자주 사용하는 웹 환경에서 유리합니다. 그러나 실질적으로 eval명령을 사용하면 외부에서 악성 코드가 유입될 수 있습니다.

-. 모질라 파이어폭스 3.5, 인터넷 익스플로러 8, 오페라 10.5, 사파리, 구글 크롬 등 대부분의 최신 웹브라우저는 JSON 전용 파서 기능을 내정하고 있기 때문에 이런 기능을 사용하면 보안에 더 유리하며 빠릅니다.




▣ JSON은 프로그래밍 언어인가?

: 사방 팔방에 JSON이라는게 등장하고 각종 사용방법이 나오고 어려워 보이지만 JSON 자체는 정말 별거 아니다. JSON 그 자체는 단순히 데이터 포맷일 뿐이다. 어떠한 통신 방법도, 프로그래밍 문법도 아닌 단순히 데이터를 표시하는 표현 방법일 뿐이다.


간단한 데이터를 xml보다 좀 더 간단하게 표현하기 위해 만든 것이다. xml보다 기능이 적기 때문에 파싱도 빠르고 간단하기 때문에 클라이언트 사이드에서, 특히 모바일에서 더욱 유용하겠다. 사실 서버 입장에서도 더 유용하기 때문에 많은 서비스들이 xml보다는 JSON을 권장한다.


다시 말하지만 이건 프로그래밍 언어가 아니다.


▣ JSON 사용 이유

-. 단순히 데이터를 받아서 객체나 변수로 할당해서 사용하기 위한 것이다.


▣ AJAX와는 다른가?

-. AJAX와는 별개의 개념이지만 AJAX가 없다면 JSON이라는 개념은 필요 없을 것이다. AJAX를 사용해 데이터를 주고 받을 때 그 데이터 포맷으로 JSON을 사용하는 것이다.


▣ 이걸 쓰려면 따로 라이브러리 같은 걸 써야 하나?

: JSON 자체는 이미 자바스크립트 표준으로 채택되어 자바스크립트에서 기본적으로 지원하고 있기 때문에 별도의 라이브러리가 필요하거나 하지는 않다. 그냥 eval()이라는 함수 하나로 해결되는게 JSON이다. 하지만 JSON의 한계로 인해 라이브러리를 따로 사용하는 경우가 많다. 그리고 자바스크립트 이 외의 환경에서도 JSON을 간단히 사용하기 위한 라이브러리들이 존재한다. JSON 공식 사이트 내용의 대부분이 바로 그것이다.


▣ JSON 단점

: AJAX는 단순히 데이터만이 아니라 javascript 그 자체도 전달할 수 있다. 무슨 말이냐면 json 데이터라고 해서 받았는데 그게 단순 데이터가 아니라 자바스크립트가 될 수도 있고, 그게 실행 될 수 있다는 것이다. 데이터인 줄 알고 받았는데 악성 스크립터일 수도 있다는 이야기이다.


JSON관련 라이브러리를 따로 사용하는 이유가 이것이다. 받은 내용에서 순수하게 데이터만 추출하기 위한 라이브러리이다.


▣ JSON으로 아무 데이터나 불러갈 수 있나?

: JSON의 한계는 JSON으로 가져올 수 있는 데이터는 해당 자바스크립트가 로드된 서버의 데이터에 한정된다는 것이다. 예를 들어서 http://kwz.kr/json.js에서 불러올 수 있는 데이터는 kwz.kr서버에 존재하는 것만 가능하다는 것이다. 구글 데이터를 불러온다거나 네이버 데이터를 불러온다거나 할 수 없다.


JSON은 단순히 데이터 포맷일 뿐이고 그 데이터를 불러오기 위해선 XNLHttpRequest()라는 자바스크립트 함수를 사용해야 하는데 이 함수가 동일 서버에 대한 것만 지원하기 때문이다.


어? 다른 서버의 데이터도 가져가서 보여주던데?? 궁하면 통한다고 방법이야 만들면 나오는거다. 그래서 나온게 일종의 프락시 역할을 하는 서버쪽 스크립트 파일과 JSONP이다.


▣ JSONP란?

: JSON with Padding을 줄인 말이다. 다른 서버의 데이터를 가져오기 위한 방법이다. 이건 해당 서버에서 JSONP의 방식을 지원해 줘야지만 가능하다. 이것이 불가능하다면 역시 프락시를 써야 한다.