본문 바로가기
IT/델파이

델파이 JSON

by 불멸남생 2023. 2. 13.

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.
반응형