안녕하세요
로로봉입니다 : )
오늘은 델파이에서 실제 JSON 텍스트를 활용하는 방법을 알아보겠습니다.
JSON이란?
JavaScript Object Notation의 축약어로 데이터를 저장하거나 전송할 때 많이 사용되는 경량의 DATA 교환 형식입니다.
JavaScript에서 객체를 만들 때 사용하는 표현식을 의미합니다.
JSON 표현식은 사람과 기계 모두 이해하기 쉬우며 용량이 작아서, 최근에는 JSON이 XML을 대체해서 데이터 전송에 많이 사용되고 있습니다.
JSON은 데이터 형식의 종류일 뿐이며 데이터를 표시하는 표현 방법이라고 보면 됩니다.
JSON의 형식
JSON의 형식은 key / value 로 하나의 쌍을 이루며 쌍따옴표를 이용하여 표기해야 합니다.
사용할 수 있는 형식은 null, number, string, array, object, boolean을 사용할 수 있습니다.
기본적으로 하나의 키 값에 하나의 데이터로 구성되는 것을 볼 수 있습니다.
// 단순한 JSON 형식
{
"Key1":"Value1",
"Key2":"Value2",
...
"Key10","Value10"
}
필요에 의해 하나의 Key 값에 Array 배열 데이터가 Value로 사용하는 경우도 아래와 같이 볼 수 있습니다.
// 배열 JSON 형식
{
"Key1":"Value1",
"Array1":[
{"ArrayKey1-1":"ArrayValue1-1","ArrayKey1-2":"ArrayValue1-2"},
{"ArrayKey2-1":"ArrayValue2-1","ArrayKey2-2":"ArrayValue2-2"}
],
"Key2":"Value2"
}
JSON 프로토콜은 일반 자바스크립트의 객체처럼 원하는 만큼 중첩시켜서 사용이 가능합니다. 배열 안의 {} 객체도 여러개가 존재하여도 괜찮고 그 안에 Key:Value도 여러개 존재하여도 괜찮습니다.
델파이에서 JSON 구조 생성
델파이에서 JSON 형식의 프로토콜을 사용하기 위해선 System.JSON 을 Uses에 추가해주어야 합니다.
uses
System.JSON;
TJSONObject를 선언 후 AddPair 함수를 사용해 원하는 Key 값에 Value를 넣어줄 수 있습니다.
procedure
var
JSONObject : TJSONObject;
JSONData : TJSONObject;
begin
JSONOData := TJSONObject.Create;
JSONObject := TJSONObject.Create;
JSONData.AddPair('Data1','데이터1');
JSONData.AddPair('Data2','데이터2');
JSONObject.AddPair('Group', JSONData); // 'Group' 안에 'Data1', 'Data2' 포함
JSONObject.AddPair('to','데이터3');
ShowMessage(JSONObject.ToString);
end;
위와 같이 JSON을 구성한 경우 결과는 아래와 같습니다.
{
"Group":{
"Data1":"데이터1",
"Data2":"데이터2"
},
"to":"데이터3"
}
이런식으로 델파이에서 JSON을 만들고 ToString으로 JSON 텍스트를 전송할 수 있습니다.
델파이에서 JSON 불러와서 사용하기
델파이를 이용해 프로그램을 개발하다 보면 JSON 형식의 데이터를 받아들여 사용할 때가 많이 있습니다.
아래 함수를 이용해 JSON 형식의 데이터를 추출하여 사용할 수 있습니다.
// 함수명 : JSONConvert
// 설 명 : JSON 텍스트에서 필드 추출
function JSONConvert(usJSON, usName: string): string;
var
JSONPair : TJSONPair;
JSONRoot : TJSONObject;
begin
JSONRoot := TJSONObject.ParseJSONValue(usJSON) as TJSONObject;
JSONPair := TJSONPair(JSONRoot.Get(usName));
if JSONPair <> nil then
Result := JSONRoot.GetValue(usName).Value
else
Result := '';
end;
// 함수명 : JSONSubConvert
// 설 명 : JSON 텍스트에서 서브 텍스트 추출
function JSONSubConvert(usJSON, usSub: string): string;
var
JSONPair : TJSONPair;
JSONRoot : TJSONObject;
usReturn : string;
begin
JSONRoot := TJSONObject.ParseJSONValue(usJSON) as TJSONObject;
JSONPair := TJSONPair(JSONRoot.Get(usSub));
if JSONPair <> nil then
begin
usReturn := JSONRoot.GetValue(usSub).ToString;
usReturn := StringReplace(usReturn,'"[','[',[]);
usReturn := StringReplace(usReturn,']"',']',[]);
Result := usReturn;
end
else
Result := '';
end;
// 함수명 : JSONArrayConvertCnt
// 설 명 : []배열 텍스트를 받아 배열 개수 응답
function JSONArrayConvertCnt(usJSON: string): Integer;
var
JSONPair : TJSONPair;
JSONArray : TJSONArray;
begin
usJSON := StringReplace(usJSON,'\"','"',[rfReplaceAll]);
JSONArray := TJSONObject.ParseJSONValue(usJSON) as TJSONArray;
Result := JSONArray.Count;
end;
// 함수명 : JSONArrayConvert
// 설 명 : []배열 텍스트의 인덱스에 위치한 데이터 추출하여 응답
function JSONArrayConvert(usJSON, usName: string; Index: Integer): string;
var
JSONArray : TJSONArray;
begin
usJSON := StringReplace(usJSON,'\"','"',[rfReplaceAll]);
JSONArray := TJSONObject.ParseJSONValue(usJSON) as TJSONArray;
if (usJSON <> '[]') and (usJSON <> '') then
Result := JSONConvert(JSONArray.Get(Index).ToString, usName)
else
Result := '';
end;
1) JSONConvert : 하나의 Key 값의 하나의 Value가 있는 경우 추출
2) JSONSubConvert : 하나의 Key 값에 Value가 아닌 {} 오브젝트나 [] 배열 그대로의 텍스트 추출
3) JSONArrayConvertCnt : [] 배열로 된 JSON 텍스트를 받아 내부 배열의 총 개수를 추출
4) JSONArrayConvert : 몇번째 배열의 Key값에 해당하는 Value값을 추출
좋아요 ♥ + 구독 부탁드립니다 : )
'개발 정보 > 델파이' 카테고리의 다른 글
[Delphi] 델파이 10.4 Sydney iOS AppStore 배포하기 (4) | 2021.04.24 |
---|---|
[Delphi] 델파이 10.4 Sydney 윈도우 프로그램으로 폰트 설치 (0) | 2021.04.22 |
[Delphi] 델파이 안드로이드/iOS 에서 FCM(Firebase Cloud Messaging) 사용하기 (23) | 2021.02.02 |
[Delphi] 델파이 FMX 키보드 표시, 숨기기 (3) | 2021.01.19 |
[Delphi] 델파이 모바일 앱 카메라 바코드 인식 (1) | 2021.01.11 |
댓글