
Dataset Serialize는 JSON 및 DataSet 작업을 단순하게 작업 할 수있는 일련의 기능입니다. 여기에는 레코드를 데이터 세트로 내보내거나 가져 오는 것과 같은 기능이 있으며 JSON에 필요한 속성 (이전에 데이터 세트에 입력 한)이있는 경우 데이터 세트 필드의 구조를 JSON 형식으로 내보내거나 가져 오는 것과 같은 기능이 있습니다. 마스터 디테일을 통해 중첩 JSON을 관리하거나 TDATASETFIELD를 사용하는 것 외에도 (가장 적합한 방법을 선택합니다). 이 모든 것은 클래스 헬기를 사용하여 더 간단하고 사용하기 쉽습니다.
[Optional] 쉽게 설치를 위해 Boss (Delphi의 종속성 관리자)를 사용하는 것이 좋습니다. boss install github.com/viniciussanchez/dataset-serialize
수동으로 설치하기로 선택한 경우 프로젝트> 옵션> 빌딩> 델파이 컴파일러> 검색 경로 에서 프로젝트에 다음 폴더를 추가하기 만하면됩니다.
../dataset-serialize/src
Dataset Serialize가 제공하는 모든 기능은 Unit Dataset.serialize의 클래스 헬퍼에 있습니다. 프로젝트를 시작하려면 기능이 필요한 곳에 참조를 추가하십시오. 예는 다음과 같습니다.
uses DataSet.Serialize;이제 모든 사용자에게 최선을 다하기 위해 각 기능, 규칙 및 특성을 살펴 보겠습니다.
데이터 세트 레코드에서 정보가 포함 된 JSON 객체를 만드는 것은 매우 간단한 작업처럼 보입니다. 그러나 그 작업은 쉬워졌습니다. DataSet Serialize에는 이에 대한 두 가지 기능, 즉 TojsonObject와 TojsonArray가 있습니다. 기능의 사용을 살펴 보겠습니다.
var
LJSONArray: TJSONArray;
LJSONObject: TJSONObject;
begin
LJSONObject := qrySamples.ToJSONObject(); // export a single record
LJSONArray := qrySamples.ToJSONArray(); // export all records
end ;두 기능의 차이점은 무엇입니까? tojsonobject는 현재 데이터 세트 레코드를 tjsonobject로만 변환합니다. TojsonArray는 선택한 레코드뿐만 아니라 데이터 세트의 모든 레코드를 tjsonArray로 변환합니다.
매개 변수
AChildRecords 자식 기록을 수출할지 여부를 나타냅니다 (마스터 세부 사항 또는 Tdatasetfield를 통해).AOnlyUpdatedRecords 수정 된 레코드 만 내보내는지 여부를 나타냅니다 (레코드가 추가, 변경 또는 삭제). 이 기능은 Firedac을 사용할 때만 사용할 수 있습니다. Cachedupdates 속성은 사실이어야합니다.tojsonobject
{} )가 반환됩니다.tojsonarray
[] )가 반환됩니다.그다지 유용하지는 않지만 중요한 기능은 정식 구조와 하중 구조입니다. 이름에서 이미 말했듯이 데이터 세트에 구성된 필드의 전체 구조를 저장하고 JSON 형식으로 구조를로드 할 수 있습니다. 다음은 데이터 세트 필드를로드 및 내보내는 방법의 예입니다.
var
LJSONArray: TJSONArray;
begin
LJSONArray := qrySamples.SaveStructure;
qrySamples.LoadStructure(LJSONArray, True);
end ;다음 속성이 제어됩니다.
Alignment, FieldName, DisplayLabel, DataType, Size, Key, Origin, Required, Visible, ReadOnly, and AutoGenerateValue ;
매개 변수
AOwns 통과 된 JSON을 매개 변수로 파괴 할 책임이있는 사람을 나타냅니다.정식 구조
[] )가 반환됩니다.하중 구조
ValidateJson 함수는 예를 들어 요청에서받은 JSON에 필요한 모든 정보가있는 경우 서버에서 검증하려는 경우 매우 유용합니다. 실제로, 데이터 세트의 모든 필드는 통과하여 필요한 필드가 JSON에 입력되었는지 확인합니다. 필드가 필요하고 JSON에 입력되지 않은 경우 기능에 의해 반환 된 JSON 배열에 추가됩니다. 아래 예를 참조하십시오.
begin
LJSONArray := qrySamples.ValidateJSON( ' {"country":"Brazil"} ' );
end ; {"country": "Brazil"} 받으면 데이터 세트가 3 개의 필드 (ID, First_Name, Country)가 있고 ID 및 First_Name 필드가 필요하다고 가정하면 다음이 반환됩니다.
[{"field":"id","error":"Id not informed"},{"field":"firstName","error":"Name not informed"}]
매개 변수
ALang 메시지 조립에 사용되는 언어 변경을 담당합니다 (기본값은 영어입니다);AOwns 통과 된 JSON을 매개 변수로 파괴 할 책임이있는 사람을 나타냅니다.validatejson
[] )가 반환됩니다.Dataset Serializa를 사용하면 JSONOBJECT, JSONARRAY 및 중첩 된 JSON을 사용하여 데이터 세트를로드 할 수 있습니다. 사용 방법의 예는 다음과 같습니다.
begin
qrySamples.LoadFromJSON( ' {"firstName":"Vinicius Sanchez","country":"Brazil"} ' );
end ;매개 변수
AOwns 통과 된 JSON을 매개 변수로 파괴 할 책임이있는 사람을 나타냅니다.로드 프롬프
DataSet Serialize를 사용하면 mergefromjsonobject를 사용하여 단순히 데이터 세트 등록을 변경할 수 있습니다. 함수는 loadfromjson과 유사합니다. 사용의 예는 요청에 사용 된 동사가 (반드시 필요하지 않음) 휴식 서버에 대한 것이며,이 경우 새 레코드를 포함시키고 싶지 않고 현재 레코드를 변경하기를 원합니다.
begin
qrySamples.MergeFromJSONObject( ' {"firstName":"Vinicius","country":"United States"} ' );
end ;매개 변수
AOwns 통과 된 JSON을 매개 변수로 파괴 할 책임이있는 사람을 나타냅니다.MergefromjsonObject
DataSet-Serialize의 일부 기능을 사용자 정의 할 수 있습니다.
TDataSetSerializeConfig.GetInstance.DateInputIsUTC := True; TDataSetSerializeConfig.GetInstance. Export .ExportNullValues := True; TDataSetSerializeConfig.GetInstance. Export .TryConvertStringToJson := True; TDataSetSerializeConfig.GetInstance. Export .ExportOnlyFieldsVisible := True; TDataSetSerializeConfig.GetInstance. Export .ExportChildDataSetAsJsonObject := False; TDataSetSerializeConfig.GetInstance. Export .ExportLargeIntAsString := False; TDataSetSerializeConfig.GetInstance. Export .ExportBCDAsFloat := False; TDataSetSerializeConfig.GetInstance. Import .ImportOnlyFieldsVisible := True; TDataSetSerializeConfig.GetInstance. Import .DecodeBase64BlobField := True; TDataSetSerializeConfig.GetInstance.RemoveBlankSpaceFieldName := True; // default // cndNone, cndLower, cndUpper, cndLowerCamelCase, cndUpperCamelCase
TDataSetSerializeConfig.GetInstance.CaseNameDefinition := TCaseNameDefinition.cndLowerCamelCase;
TCaseNameDefinition.cndNone:
[ { "MOB_ICADASTRO":11795,"MOB_EMI_REG":6,"CODIGODOCLIENTE":1,"CDOCUMEN1":"999999" } ]
TCaseNameDefinition.cndLower:
[ { "mob_icadastro":11795,"mob_emi_reg":6,"codigodocliente":1,"cdocumen1":"999999" } ]
TCaseNameDefinition.cndUpper:
[ { "MOB_ICADASTRO":11795,"MOB_EMI_REG":6,"CODIGODOCLIENTE":1,"CDOCUMEN1":"999999" } ]
TCaseNameDefinition.cndLowerCamelCase:
[ { "mobIcadastro":11795,"mobEmiReg":6,"codigodocliente":1,"cdocumen1":"999999" } ]
TCaseNameDefinition.cndUpperCamelCase:
[ { "MobIcadastro":11795,"MobEmiReg":6,"Codigodocliente":1,"Cdocumen1":"999999" } ] TDataSetSerializeConfig.GetInstance. Export .FormatDate := ' YYYY-MM-DD ' ; TDataSetSerializeConfig.GetInstance. Export .FormatCurrency := ' 0.00## ' ; TDataSetSerializeConfig.GetInstance. Export .FormatFloat := ' ,0.00 ' ; TDataSetSerializeConfig.GetInstance.DataSetPrefix := [ ' mt ' , ' qry ' ];위에 제시된 각 상황에 대해 샘플 프로젝트를 확인하십시오. 궁금한 점이나 제안이 있으시면 연락하거나 풀어 요청하거나 문제를 만듭니다.

DataSet-Serialize MIT 라이센스에 따라 무료 및 오픈 소스 소프트웨어입니다.
혼자 우리는 더 빨리 간다. 함께 우리는 더 나아갑니다.