一、DataSet转JSON
[delphi] view plain copy print?
- //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;
- 二、JSON转DataSet //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[j].Text := jRecord.GetValue(ADataset.Fields[j].FieldName).ToString;
- ADataset.Post;
- end;
- end;