REST Servers in Delphi XE Using DataSnap
[REST-Delphi #3] 델파이 JSON
JSON(JavaScript Object Notation)은 자바스크립트 객체에 대한 표기법으로 XML과 함께 델파이 REST 어플리케이션에서 주로 사용되므로 Delphi에서 JSON이 어떻게 처리 되는지 알아 두는 것이 중요합니다. 물론 REST사용지 JSON을 사용해야 하는 것은 아니지만 유행을 좋아하는 대한민국 개발자들에게 JSON은 임원진과, 고객의 신선한(?) 기대감에 만족을 줄 만한 포멧이지요....
JSON은 어플리케이션간 교환이 가능한 TEXT기반의 자바스크립트 객체의 표현 방식으로 기존에 다양한 데이터 구조를 표현할 수 있었던 XML에 비해 단순하고 프로그래밍 관점에서 더 밀접하고 자바스크립트를 이용하는 브라우저 기반의 어플리케이션에서 파싱하기 쉬운 장점과 타 언어와의 융합을 위해 적합한 형태로 인정 받고 있습니다.
JSON에 대한 보다 자세한 참고 : RFC 4627 기술서(IEFT) 또는 JSON 홈페이지(http://www.ietf.org/rfc.rfc4627.txt, http://json.org)
JSON이 이 제공하는 구조
- JSON Objects : name:value 쌍으로 이루어진 집합 :
ex) { "Name":"Marco", "Value":100 }
- JSON Arrays : ","와 "{}" 로 구분된 배열 및 집합으로 표현된 리스트
ex)
{ "Me": { "FirstName":"Marco", "LastName":"Cantù", "Wife": "Lella",
"Kids": [{ "Name":"Benedetta","Age":11 }, { "Name":"Jacopo","Age":7 } ] }}
Delphi에서 제공하는 JSON
Delphi에서는 Delphi 2010 버전부터 JSON을 제공하고 있으며 "DBXJSON" 유닛에 JSON 처리를 위한 각종 클래스가 정의 되어 제공되고 있습니다.
기 정의된 JSON 객체
기본 제공 : TJSONNull, TJSONFalse, TJSONTrue, TJSONString and TJSONNumber
데이터 구조 제공 : TJSONObject (and the internal TJSONPair) and TJSONArray
JSON DEMO Source
unit FormJSON; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, DBXJSON, Vcl.StdCtrls; type TfrmJSON = class(TForm) btnValues: TButton; mmLogs: TMemo; btnSimpleArray: TButton; btnSimpleObject: TButton; procedure btnValuesClick(Sender: TObject); procedure btnSimpleArrayClick(Sender: TObject); procedure btnSimpleObjectClick(Sender: TObject); private procedure LogAndFree(jValue: TJSONValue); { Private declarations } public { Public declarations } end; var frmJSON: TfrmJSON; implementation {$R *.dfm} //생성한 객체는 반드시 해제 해 주어야 함(로그 기록후 제거) procedure TfrmJSON.LogAndFree (jValue: TJSONValue); begin try mmLogs.Lines.Add(jValue.ClassName + ' > ' + jValue.ToString); finally jvalue.Free; end; end; // TJSONArray에 대한 테스트 procedure TfrmJSON.btnSimpleArrayClick(Sender: TObject); var jList: TJSONArray; begin jList := TJSONArray.Create; jList.Add(22); jList.Add('foo'); jList.Add(TJSonArray.Create (TJSONTrue.Create)); (jList.Get(2) as TJSonArray).Add (100); mmLogs.Lines.Add('**** btnSimpleArrayClick ****'); mmLogs.Lines.Add(jList.ToString); jList.Free; end; // TJSONObject 값에 대한 테스트 procedure TfrmJSON.btnSimpleObjectClick(Sender: TObject); var jsonObj, subObject: TJSONObject; begin jsonObj := TJSONObject.Create; jsonObj.AddPair(TJSONPair.Create('Name', 'Marco')); jsonObj.AddPair(TJSONPair.Create('Value', TJSONNumber.Create(100))); subObject := TJSONObject.Create(TJSONPair.Create ('Subvalue', 'one')); jsonObj.AddPair( TJSONPair.Create ('Object', subObject)); mmLogs.Lines.Add('**** btnSimpleObjectClick ****'); mmLogs.Lines.Add(jsonObj.ToString); jsonObj.Free; end; // TJSONVALUE 값에 대한 테스트 procedure TfrmJSON.btnValuesClick(Sender: TObject); begin mmLogs.Lines.Add('**** btnValuesClick ****'); LogAndFree (TJSONNumber.Create(22)); LogAndFree (TJSONString.Create('sample text')); LogAndFree (TJSONTrue.Create); LogAndFree (TJSONFalse.Create); LogAndFree (TJSONNull.Create); end; end.
JSON Demo 결과
'프로그래밍 > Delphi' 카테고리의 다른 글
DataSnap/REST ISAPI Dll 모듈 생성/디버깅/배포 방법 (1) | 2013.12.09 |
---|---|
이미지 타입 얻기 통합모듈 (0) | 2013.12.05 |
[REST-Delphi #2] 델파이 관점에서의 REST (0) | 2013.09.02 |
[REST-Delphi #1] 델파이 DataSnap을 이용한 REST 프로그래밍 요약 (0) | 2013.09.02 |
웹페이지내 특정 Element를 이미지로 저장하기 (2) | 2012.12.06 |