공통 데이터스냅에서 제공하는 JSON 포맷 데이터 사용(분석)하기
2015.07.20 20:15
데이터스냅으로 JSONArray와 JSONObject 두가지 정보를 제공하고 분석해봅니다.
데이터스냅으로 JSON 데이터 제공 시 주의할 점은 반환 값이 "result" 값의 배열로{"result": []} ) 전달됩니다.
{"result":[{"LastName":"Hong","FirstName":"GilDong","Age":"30"}]}
그렇기 때문에 데이터스냅에서 받은 JSON 데이터를 분석(파싱)하려면 result 항목의 배열 값의 첫번째 값(result.[0])을 사용해야 합니다.
JSONArray와 JSONObject 데이터를 사용하는 방법을 알아봅니다.
1, JSONArray
JSONArray는 목록형태의 복수의 데이터를 전달할 수 있습니다.
배열(JSONArray)로 데이터를 전달할 경우 아래와 같이 2차원 배열로 전달됩니다.
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)로 분석합니다.
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] 버튼을 누릅니다.
2, JSONObject
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;
잘 정리된 내용 감사합니다.
도움이 되었습니다.