S3_Leo 发表于 2024-6-15 17:29:46

DATASET 和 JSON 互转

function DataSetToJson(ADataset: TDataSet): string;
// [{"CityId":"18","CityName":"西安"},{"CityId":"53","CityName":"广州"}]
var
LRecord: string;
LField: TField;
i: integer;
begin
Result := '';
if (not ADataset.Active) or (ADataset.IsEmpty) then
    Exit;
Result := '[';
ADataset.DisableControls;
ADataset.First;
while not ADataset.Eof do
begin
    for i := 0 to ADataset.FieldCount - 1 do
    begin
      LField := ADataset.Fields;
      if LRecord = '' then
      LRecord := '{"' + LField.FieldName + '":"' + LField.Text + '"'
      else
      LRecord := LRecord + ',"' + LField.FieldName + '":"' + LField.Text + '"';
      if i = ADataset.FieldCount - 1 then
      begin
      LRecord := LRecord + '}';
      if Result = '[' then
          Result := Result + LRecord
      else
          Result := Result + ',' + LRecord;
      LRecord := '';
      end;
    end;
    ADataset.Next;
end;
ADataset.EnableControls;
Result := Result + ']';
end;


二、JSON转DataSet

//2)JSON字符串转换为数据集:

procedure JsonToDataSet(AJson: string; ADataset: TDataSet);
var
jDataSet: TJSONArray;
jRecord: TJSONObject;
i, j: Integer;
begin
if (AJson = '') or (ADataset = nil) or (not ADataset.Active) then
    Exit;
jDataSet := TJSONObject.Create.ParseJSONValue(AJson, True) as TJSONArray;
while not ADataset.Eof do
    ADataset.Delete;
for i := 0 to jDataSet.Size - 1 do
begin
    ADataset.Append;
    jRecord := jDataSet.Get(i) as TJSONObject;
    for j := 0 to ADataset.FieldCount - 1 do
      ADataset.Fields.Text := jRecord.GetValue(ADataset.Fields.FieldName).ToString;
    ADataset.Post;
end;

页: [1]
查看完整版本: DATASET 和 JSON 互转