admin

[数据库] Delphi DataSet数据集和JSON互转函数

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

//需USES System.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[i];

      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;




//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[j].Text := jRecord.GetValue(ADataset.Fields[j].FieldName).ToString;

    ADataset.Post;

  end;

end;


#1楼
发帖时间:5月前   |   查看数:0   |   回复数:0
游客组