HomeWork

JSON#2(JavaScript Object Notation)

인천총각 2009. 12. 22. 14:11

Json (JavaScript Object Notation) 이라는 데이터 형식이 있는데, 생각보다 매우 유용하다.
표준은 Standard ECMA-262 3rd Edition—December 1999 (http://json.org/) 에 나와 있다.

Json 은 XML 처럼 어떤 information 을 hierarchical 하게 보여주는 표현방법인데,
그 형식의 간단함에 비해 매우 편리하게 dynamic 한 방식으로 data 를 나타내게 해준다.
왜 이걸 진작에 활용하지 않았을까 싶을 정도로 강력한 기능에 감탄을 할 정도다.

1. Json 포맷
크게 보면 Json 은 세 가지 포맷만 알면 된다.

(1) 객체
형식 : { Name : Value, Name : Value, ... }
설명 : Name 은 그냥 변수이름틱한 string, Value 는 Json Object, Json Array, 또는 Json Value 다.
Value 형식이 Json Object 가 될 수 있다는 것은 nested 된다는 뜻이다.
예제 : { "ID" : "ABC1213", "NAME" : "Youngin Shin", "Parameters" : { "Age" : 34, "Gener" : "M", ... } }

(2) 배열
형식 : [ Value, Value, Value, ... ]
설명 : Name 없이 value 만 있는 배열. [] 로 열고 닫음. 여기서도 Value 는 Json Object, Json Array,
또는 Json Value 다. Value 형식이 Json Array 가 될 수 있다는 것은 nested 된다는 뜻이다.
예제 : { "ClickTimes" : [0, 2, 3, 5, 6, 8], "Users" : [ { "ID" : "1" }, { "ID" : "2" }, ... ] }

(3) 값
형식 및 설명 : 숫자 또는 문자열 등등..
예제 : 위 예제들에서 [ ] 나 { } 로 둘러싸인 것들 말고 나머지 atomic 한 것들..

2. Json 의 장점
Json 를 좀 써본 결과 내가 느끼는 실용적인 측면에서의 장점은 ...

(1) 매우 compact 하다. 몇 개의 [ ], { }, : 등등으로 모든 정보를 구조적으로 표현하니까..
XML 이나 HTML 등 SGML 계열의 언어를 보면 <TAG> ... </TAG> 형식에 들어가는 문자가 너무 많아서..
자칫 error 가 나기 쉽고 데이터가 어디서 어떻게 잘리는 지 눈으로 보고 파악하기도 매우 어렵다. 그보다,
데이터의 사이즈가 이런 tag 들 때문에 실제 들어있는 정보에 비해 많이 커진다. 거기 비해 Json 은 거의
최소한의 구분을 위한 수준으로 [ ], { }, : 등이 들어 있는 듯 느껴진다. 실제 그렇기에 Google 및 MS 등의
회사들에서는 핵심적인 검색 데이터를 Json 으로 표현하고 있다.

(2) XML parser 에 비해 Json parser 의 사용법이 훠얼씬 간단하다.
XML 로 표현된 데이터를 읽어들이고, 이를 tree 형식으로 메모리에서 재구성하기 위해 XML parser 를
써봤거나 써보려고 했던 사람은 얼마나 복잡하고 잘 안되는 지 알 것이다. XmlNode 이 뭐니 여러가지의
클래스들이 쓰여서 parsing 해야되는데, 각종 컴파일 에러가 나든가 아니면 멀쩡한 XML 이 parse 되도
아무런 정보가 memory 에 안생기는 등의 문제를 해결해야하는 수고에 짜증이 많이 났다. 이걸 되도록
하기 위해 XML 을 다시 재편집하고 앉아 있다보면 원래 잘 표현되어 있던 XML 은 어디로 가고, 매우
이상한 구조로 변해버린 XML 보면 화가 나기도 한다. 또 뭐 새로운 정보를 좀 더 넣으려고 XML 을
재구성하게 되면 또 parsing  이 안되는 문제에 봉착하고...

여기 비해 Json parser 사용법은 그야말로 너무나 간단하다. 예를 들어 C# 용 Json library 를 쓰면..

JsonValue jvItem = JsonParser.Parse(strJsonText);

이러면 끝이다. XML parser 도 이러면 얼마나 좋아?

(3) " 를 제외한 [ ] 나 { } 는 " " 안에 있으면 따로 escape 하지 않아도 된다!!!
이거는 참 별 거 아닌데도, 아주 편리하게 느껴진다. 예를 들면..

{ "Name" : "{ }, [ ], : ... " }

위와같은 표현이 가능한다는 말. 물론 " 를 " " 안에 넣으려면 \" 로 escape 해야된다.

3. Json Parser
Microsoft 내부 Live Search 팀에서 사용하는 .NET 용 JsonParser 라이브러리를 나는 사용하고 있는데,
다른 public domain 에서도 library 구하는 것은 어렵지 않을 듯 하다. 공개된 System.Json 도 있다.
Json.Serialize, Deserialize 를 적절히 사용하면 되긴한데 좀 불편한 감이 없지 않다.

하여간... Json 을 알고난 이후, 거의 모든 data 및 configuration 작업은 모조리 Json 으로 하고 있다.
text parsing 을 일일이 손으로 짜면 참 귀찮고, yacc/lex 를 쓰면 너무 번거로운 것을 생각하면..
그야말로 만능이 아닐 수 없다.