Delphi DataSetToJson JsonToDataSet


本文整理自网络,侵删。

 
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;

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.Count - 1 do
  begin
    ADataset.Append;
    jRecord := jDataSet.Items[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;

来源:https://my.oschina.net/u/582827/blog/3060965

相关阅读 >>

Delphi中webbrowser问题集锦

Delphi scrollbox1滚动框鼠标滚轮

Delphi 的异步方法

Delphi 通过窗口标题结束进程

Delphi webbrowser.oleobject属性

Delphi memo控件对粘贴板的支持

Delphi gb2312 编码转义url字符串

settimer函数用法

Delphi 中tresourcestream流使用

Delphi跨平台检测网络连接状态

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...