JSON이란 무엇인가?
- 어떻게 읽으면 되나?
JSON ( /ˈdʒeɪsən/) 제이선이라고 읽으면 되겠다. - 무엇을 줄인 말이냐?
JavaScript Object Notation이라는 이름에서 알 수 있듯이 자바스크립트를 위한 것이고 객체 형식으로 자료를 표현하는 것이다. - 이거 프로그래밍 언어냐?
사 방 팔방에 JSON이라는 게 등장하고 각종 사용방법이 나오고 어려워 보이지만 JSON 자체는 정말 별거 아니다. JSON 그자체 는 단순히 데이터 포맷일 뿐이다. 어떠한 통신 방법도, 프로그래밍 문법도 아닌 단순히 데이터를 표시하는 표현 방법일 뿐이다.
간 단한 데이터를 xml보다 좀 더 간단하게 표현하기 위해 만든 것이다. XML보다 기능이 적기 때문에 파싱도 빠르고 간단하기 때문에 클라이언트 사이드에서, 특히 모 바일에서 더욱 유용하겠다. 사실 서버 입장에서도 더 유용하기 때문에 많은 서비스들이 XML보다는 JSON을 권장한다.
다시 말하지만 이건 프로그래밍 언어가 아니다. - 이거 공식 사이트 없냐?
네이버에서 JSON으로 검색하면 시덥잖은 네이버 자체 컨텐츠들(블로그, 카페, 지식인)만 뜨는데 JSON 공식 사이트는 멀쩡히 있고, 한국어도 지원된다.
http://json.org/json-ko.html
여기 들어가면 좀 당황스러울 수도 있다. 뭔 놈의 공식사이트가 내용이 진짜 간단하고 별 거 없기 때문이다.
위키피디아를 보면 더 잘 설명이 되어 있다.
http://ko.wikipedia.org/wiki/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은 단순히 데이터 포맷일 뿐이고 그 데이터를 불러오기 위해선 XMLHttpRequest()라는 자바스크립트 함수를 사용해야 하는데 이 함수가 동일 서버에 대한 것만 지원하기 때문이다.
어? 다른 서버의 데이터도 가져가서 보여주던데??
궁하면 통한다고 방법이야 만들면 나오는 거다. 그래서 나온 게 일종의 프락시 역할을 하는 서버쪽 스크립트 파일과 JSONP이다. - JSONP는 뭐냐????
JSON with Padding을 줄인 말이다.
다른 서버의 데이터를 가져오기 위한 방법이다.
이건 해당 서버에서 JSONP의 방식을 지원해 줘야지만 가능하다. 이것이 불가능하면 역시 프락시를 써야 한다.
출처 - http://blog.naver.com/musecje?Redirect=Log&logNo=10126963299
JSON(제이슨, JavaScript Object Notation)은, 인터넷에서 자료를 주고받을 때 그 자료를 표현하는 방법이다. 자료의 종류에 큰 제한은 없으며, 특히 컴퓨터 프로그램의 변수값을 표현하는 데 적합하다.
그 형식은 자바스크립트의 구문 형식을 따르지만, 프로그래밍 언어나 플랫폼에 독립적이므로 C, C++, C#, 자바, 자바스크립트, 펄, 파이썬등 많은 언어에서 이용할 수 있다.
RFC 4627로 규격화되었다.
목차[숨기기] |
[편집]문법
JSON 문법은 자바스크립트 표준인 ECMA-262 3판의 객체 문법에 바탕을 두며, 인코딩은 유니코드로 한다. 표현할 수 있는 자료형에는 수, 문자열, 참/거짓이 있고, 또 배열과 객체도 표현할 수 있다.
배열은 대괄호[]로 나타낸다. 배열의 각 요소는 기본자료형이거나 배열, 객체이다.
[10, {"v": 20}, [30, "마흔"]]
객체는 이름/값 쌍의 집합으로, 중괄호{}로 싼다. 이름은 문자열이기 때문에 반드시 따옴표를 하며, 값은 기본자료형이거나 배열, 객체이다. 각 쌍이 나오는 순서는 의미가 없다.
{"name2": 50, "name3": "값3", "name1": true}
아래와 같이 이름에 따옴표를 쓰지 않아도 상관 없지만, 쓰는 편이 문자열과 숫자를 구분하기 좋다.
{name2: 50, name3: "값3", name1: true}
JSON 메시지 단위는 배열이나 객체이다. 위의 두 예는 JSON 메시지가 될 수 있다.
[편집]예제
다음은 한 사람에 관한 정보를 갖는 JSON 객체이다.
{ "name": "테스트", "나이": 25, "성별": "여", "기혼": true, "주소": "서울특별시 양천구 목동", "특기": ["농구", "도술"], "가족관계": {"#": 2, "아버지": "홍판서", "어머니": "춘섬"}, "회사": "경기 안양시 만안구 안양7동" }
[편집]장점
- JSON은 텍스트로 이루어져 있으므로, 사람과 기계 모두 읽고 쓰기 쉽다.
- 프로그래밍 언어와 플랫폼에 독립적이므로, 서로 다른 시스템간에 객체를 교환하기에 좋다.
- 자바스크립트의 문법을 채용했기 때문에, 자바스크립트에서
eval
명령으로 곧바로 사용할 수 있다. 이런 특성은 자바스크립트를 자주 사용하는 웹 환경에서 유리하다. 그러나 실질적으로eval
명령을 사용하면 외부에서 악성 코드가 유입될 수 있다. 모질라 파이어폭스3.5, 인터넷 익스플로러 8, 오페라 10.5, 사파리, 구글 크롬 등 대부분의 최신 웹 브라우저는 JSON 전용 파서 기능을 내장하고 있으므로 이런 기능을 사용하는 것이 더 안전할 뿐만 아니라 빠른 방법이다.
[편집]바깥 고리
확장자 | . json |
---|---|
MIME Type | application / json |
종류 | Data interchange |
국제 표준 | RFC 4627 |
JSON (제이슨, JavaScript Object Notation )은 JavaScript 에서 객체 표기법을 기반으로 한 경량 데이터 기술 언어 이다.
목차[ 숨기기 ] |
특징 [ 편집 ]
JSON은 웹 브라우저 등에서 자주 사용되는 ECMA-262, revision 3 호환 JavaScript [1] ( ECMAScript ) 기반하고있다. 2006 년 7 월 에 RFC4627에서 동작 규정되어 MIME 타입 은 application / json
, 확장자 는 json으로 한.
JSON은 JavaScript에서 객체 표기법의 일부이지만, JavaScript 이용에 한정된 것은 아니다.
JSON은 간단하기 때문에, 특히 Ajax 분야에서 이용이 확산되고있다. JavaScript에서 JSON을 파싱하고 가져올 때 문자열을 JavaScript 코드로 해석하는 eval
함수를 작용시키는 것만으로 좋다 [2] . 이렇게 널리 사용하는 웹 브라우저 탑재 언어인 JavaScript로 쉽게 읽을 때문에 Ajax 개발자들로부터 주목을 받게되었다.
JavaScript 언어 이외에도 대부분의 언어에서 JSON은 단순한 처리로 내보내기 및 가져오기있다. 또한 구현된 프로그래밍 언어 수는 YAML더 많다고 말한다. 따라서 JSON 다른 프로그래밍 언어 간의 데이터 전달에 효율적이다. 웹 애플 리케이션 의 경우, 웹 클라이언트 에서 JavaScript와 데이터를 배달 등은 그 제일의 활용 예라고 할 수있다. 프로세스간 통신 시스템 간의 통신에도 느슨하게 하기 위해 JSON으로 정보를 전달할 수있다.
표기 방법 [ 편집 ]
JSON 표현하는 데이터 형식 은 다음과 같으며, 이들을 조합하여 데이터를 기술한다. true
, false
, null
등은 모두 소문자로하지 않으면 안된다.
- 숫자 ( 정수 , 부동 소수점 숫자 )
- 문자열 (backslash로 이스케이프 시퀀스 기법을 포함한 큰 따옴표로 묶은 문자열)
- 부울 (
true
및false
) - 배열 (데이터 순서)
- 개체 (정렬되지 않은 키와 값 쌍의 컬렉션. JSON는 연관 배열 과 동일합니다.)
null
수치는 10 진수 표기로 한 8 진수, 16 진수 표기법 등은 없다. 또한 부동 소수점 숫자 로 1.0e-10
등의 지수 표기 도있다.
문자열 (JSON 그 자체와 마찬가지로) Unicode 문자열이다. 기본적으로 JavaScript의 문자열 리터럴과 같지만, 주위에 작은 따옴표 사용할 수 없다. 백슬래시의 탈출이있다.
배열은 0 개 이상의 값을 쉼표로 구분하여 대괄호로 묶을 수로 표현한다. 예를 들어 다음과 같이 표현한다 :
[ "milk", "bread" "eggs"]
객체는 키와 값의 쌍을 콜론으로 대하고이 대 쉼표로 구분하여 제로 개 이상 열거하고 전체를 괄호로 묶을 수로 표현한다. 예를 들어 다음과 같이 표현한다 :
{ "name": "John Smith", "age": 33}
여기서 주의할 것은 키로 사용하는 데이터 형식은 문자열에 한함이다. 따라서
{name : "John Smith", age : 33}
표기는 허용되지 않는다. 이 후자의 표기는 JavaScript 객체 표기법으로 정확하지만, JSON은 잘못된 표기이다.
인코딩 [ 편집 ]
JSON 텍스트는 Unicode 로 인코딩으로되어있다 (SHALL). 기본 인코딩은 UTF-8이다. 또한 단일 문자열이 아닌 한 처음 두 문자는 반드시ASCII 문자이기 때문에, 처음 4 바이트를 보는 것으로, UTF-8, UTF-16LE, UTF-16BE UTF-32LE, UTF-32BE 중 형식으로 인코딩되어 있는지 판별할 수있다.
Ajax에서 JSON 사용 [ 편집 ]
Ajax 에서 XMLHttpRequest 에서 비동기적으로 JSON에서 데이터를받는 방법을 보여준다 :
var the_object ; var http_request = New XMLHttpRequest ( ) ; http_request. open ( "GET" , url , true ) ; http_request. onreadystatechange = function ( ) { if ( http_request. readyState == 4 ) { if ( http_request. status == 200 ) { the_object = eval ( "(" + http_request. responseText + ")" ) ; } else { alert ( "There was a problem with the URL" ) ; } http_request = null ; } } ; http_request. send ( null ) ;
여기서 http_request
는 XMLHttpRequest 객체이며, 그것을 url
에 액세스하고 돌아왔다 JSON으로 기술된 데이터를 the_object
에 저장된다. 지금 XMLHttpRequest를 사용하여 구현을했지만 iframe 같은 다른 구현 방법도있다. 또한 JavaScript 라이브러리 의 prototype.js 에서는 HTTP 의 X-JSON
헤더를 이용하여 쉽게 JSON 데이터 전달있다.
다른 데이터 기술 법과의 관계 [ 편집 ]
- XML
- JSON은 XML과 달리 마크업 언어 가 아니다. 웹 브라우저 에서 사용할 수있다는 점에서는 공통하고있다. 또한 양자 모두 거대한 바이너리 데이터를 처리할 방법이없는 것이 일반적입니다.
- YAML
- JSON은 YAML의 일부로 간주 좋은 [1] . YAML에 블록 형식과 인라인 형식 (흐름 형식) 표기법이 있지만, JSON은 후자에 더 제동을 걸고 것으로 파악할 수있다. 예를 들면 Ruby 에서는 다음과 같이하여 JSON을 YAML로 가져올 수있다 :
the_object = YAML.load ( '{ "name": "John Smith", "age": 33}')
- YAML1.1 이전에는 배열과 연관 배열 구분을 각각
,
같이 쉼표 + 공백 모양으로하여 JSON의 슈퍼 세트가되었지만, YAML1.2는 단락 문자도 호환이 되었기 때문에, 정상적인 JSON 문서에서 공식적으로 완전한 슈퍼 세트가되었다. 약간의 차이점은 연관 배열의 키를 유일 무엇을 JSON에서는 SHOULD 수준에서 요청하는 반면 YAML1.2는 MUST 수준에서 완전히 금지하고 있기 때문에 해당 이상 데이터 오류 처리 차이가 나올 가능성은있다.
구현 [ 편집 ]
JSON은 많은 프로그래밍 언어 에서 사용할 수있다. 예를 들어, ActionScript , C , C + + , C # , ColdFusion , Common Lisp , Curl , D 언어 ,Delphi , E , Erlang , Haskell , Java , JavaScript ( ECMAScript ), Lisp , Lua , ML , Objective CAML , Perl , PHP , Python , R , Rebol , Ruby, Scala , Squeak 등.
관련 항목 [ 편집 ]
註 [ 편집 ]
- ^ " Introducing JSON "json.org. 2008 년 4 월 19 일 보기.
- ^ 그러나 잘못된 데이터에 대한 내성에서 JavaScript에서 JSON 전용 퍼스 함수가 작성되어있다.
외부 링크 [ 편집 ]
- 사양 등
- Introducing JSON (영어 버전)
- JSON 소개 (일본어 버전)
- RFC 4627
- 기타
'Development > JavaScript' 카테고리의 다른 글
JSON 예제 2 - String에서 읽기 (0) | 2012.04.13 |
---|---|
JSON 예제 1 (0) | 2012.03.28 |
window.onload - 페이지완전히 로딩후 처리하기위한 스크립트 (0) | 2012.01.25 |
ECMAScript (0) | 2012.01.23 |
JavaScript (0) | 2012.01.23 |