데이터스냅으로 JSONArray와 JSONObject 두가지 정보를 제공하고 분석해봅니다.

 

데이터스냅으로 JSON 데이터 제공 시 주의할 점은 반환 값이 "result" 값의 배열로{"result": []} ) 전달됩니다.

 

{"result":[{"LastName":"Hong","FirstName":"GilDong","Age":"30"}]}

 

그렇기 때문에 데이터스냅에서 받은 JSON 데이터를 분석(파싱)하려면 result 항목의 배열 값의 첫번째 값(result.[0])을 사용해야 합니다.

 

 

JSONArray와 JSONObject 데이터를 사용하는 방법을 알아봅니다.

1, JSONArray

JSONArray는 목록형태의 복수의 데이터를 전달할 수 있습니다.

배열(JSONArray)로 데이터를 전달할 경우 아래와 같이 2차원 배열로 전달됩니다.

3c7d55ea6d1d8978dc7372234368adac.jpg

function TServerMethods1.MyData: TJSONArray;
var
 jRecord,jRecord2: TJSONObject;
 I: Integer;
begin
ClientDataSet1.Open;
Result := TJSonArray.Create;

while not ClientDataSet1.EOF do
  begin
     jRecord := TJSONObject.Create;
     for I := 0 to ClientDataSet1.FieldCount - 1 do
       jRecord.AddPair( ClientDataSet1.Fields[I].FieldName,TJSONString.Create (ClientDataSet1.Fields[I].AsString));
       Result.AddElement(jRecord);
      ClientDataSet1.Next;
  end;
end;

 

 

데이터스냅 서버에서는 위의 코드로 데이터를 제공했습니다.

 

RESTDebugger(Tools > REST Debugger)로 분석합니다.

rest1.png

1, Request.URL : http://localhost:8080/datasnap/rest/TServerMethods1

2, Parameters.Resource : MyData

3, [Send Request] 클릭

 

위 과정을 거치면 {"result": [[{"EMP_NO":"2", .... 와 같은 데이터를 받습니다.

수신받은 데이터는 result 값이 배열안에 배열(2중배열)로 처리되어 있습니다.

Tabular Data(표형식의 데이터)로 사용하려면 결과값이 배열이어야 하기때문에 JSON Root Element에 result.[0] 입력 후 [Apply] 버튼을 누릅니다.

rest2.png

 

 

 

 

2, JSONObject

 

fc5591e2c43acd2093357b10f0af5ec0.jpg

function TServerMethods1.GetName:TJSONObject;
var
 jRecord: TJSONObject;
begin
  jRecord := TJSONObject.Create;
  result := jRecord;
  result.AddPair('LastName','Hong');
  result.AddPair('FirstName','GilDong');
  result.AddPair('Age','30');
end;

 

 

 

위와 같이 이름정보를 JSONObject로 전달할 수 있습니다.

 

그리고 클라이언트에서는 아래 코드로 JSONObject정보를 분석해 사용할 수 있습니다.

procedure TForm1.Button1Click(Sender: TObject);

var

  LastName, FirstName, Age: string;

begin

  RESTClient1.BaseURL := 'http://localhost:8080/datasnap/rest/TServerMethods1';

  RESTRequest1.Resource := 'GetName';

 

  RESTRequest1.Execute;

 

  RESTResponse1.RootElement := 'result.[0]';

  RESTResponse1.JSONValue.TryGetValue<string>('LastName', LastName);

  RESTResponse1.JSONValue.TryGetValue<string>('FirstName', FirstName);

  RESTResponse1.JSONValue.TryGetValue<string>('Age', Age);

 

  ShowMessage(LastName + ' ' + FirstName + ' ' + Age);

 

end;

 

 

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 50079
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 47900
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 50838
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 55751
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 65797
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 51390
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 80618
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 211368
42 델파이에서 사용하는 각 Stream(스트림) 정리 김원경 2017.01.04 23425
41 BLOB 컬럼에 (이미지 등의)데이터 읽고 쓰기 험프리 2016.08.01 6489
40 안드로이드 개발환경 추가 조치방법 - RAD Studio에서 SDK 설정 Humphery 2015.10.01 5948
39 [추가자료] 안드로이드 개발환경 추가 조치방법 - 수동 SDK Tools 업데이트 file Humphery 2015.10.01 5349
38 OutputDebugString 함수로 디버그로그를 출력할 수 있습니다. file 험프리 2016.02.16 5070
» 데이터스냅에서 제공하는 JSON 포맷 데이터 사용(분석)하기 [1] file Humphery 2015.07.20 4167
36 델파이 개체를 메모리에서 해제할 때 Free와 FreeAndNil의 차이점 김원경 2017.02.01 3023
35 패키지 개발방식과 DLL개발방식의 차이와 장단점 김원경 2018.05.02 2315
34 퀵레포트(Quick Report)에 사진 출력하기 험프리 2016.08.01 2297
33 제너릭(Generic)과 제너릭을 사용한 예제(제너릭 콜렉션 등) file 김원경 2020.01.15 1804
32 TCategoryButtons 동적 생성하고, TButtonItem 클릭 이벤트 연결하기 file 험프리 2016.03.23 1710
31 델파이 문서화 도구 참고링크 Humphery 2015.09.11 1466
30 [추가된 문법] DLL 정적 호출 시 지연 호출(Delayed)-델파이 2010 추가 김원경 2016.12.27 1367
29 RAD Studio IDE에서 SVN 사용하기 + TortoiseSVN 사용하기 험프리 2016.02.29 1345
28 BPL(패키지)를 이용해 프로그램 모듈화 하기 험프리 2015.11.24 1287
27 [개발자 Tip] 모바일 앱 개발 시 시간 낭비를 줄이는 Tip #1: 테스트하기 위해 기다리는 시간을 줄인다. 관리자 2016.12.26 1210
26 IBM 왓슨과 인공지능(AI) 활용하기 - 델파이/C++빌더 관리자 2019.10.25 1055
25 [코드레이지11] SVN, DUnitX과 Jenkins 서버로 자동 빌드/테스트 환경 구성 - Craig Chapman 험프리 2016.11.22 1022
24 3가지 API 이야기: VCL에서 WinAPI, COM&ShellAPI, WinRT 활용하기 관리자 2019.09.18 1021
23 그라데이션이 적용된 멋진 스타일을 적용하고 싶다면 - 스텔라(Stellar) FMX 스타일 관리자 2019.09.17 1019