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.
'IT > 델파이' 카테고리의 다른 글
TStringList를 이용한 문자열 중복 제거 처리 (0) | 2023.02.13 |
---|---|
델파이 DataSnap을 이용한 REST 프로그래밍 요약 (0) | 2023.02.13 |
이미지 타입 얻기 통합모듈 (0) | 2023.02.13 |
DataSnap/REST ISAPI Dll 모듈 생성/디버깅/배포 방법 (0) | 2023.02.12 |
확장자를 이용한 자동실행 처리 방법 (0) | 2023.02.12 |