Delphi中DataSet和JSON的互转

//1)数据集转换为JSON字符串:
//需USES System.JSON;

 1 function DataSetToJson(ADataset: TDataSet): string;
 2 // [{"CityId":"18","CityName":"西安"},{"CityId":"53","CityName":"广州"}]
 3 var
 4 LRecord: string;
 5 LField: TField;
 6 i: integer;
 7 begin
 8 Result := '';
 9 if (not ADataset.Active) or (ADataset.IsEmpty) then
10 Exit;
11 Result := '[';
12 ADataset.DisableControls;
13 ADataset.First;
14 while not ADataset.Eof do
15 begin
16 for i := 0 to ADataset.FieldCount - 1 do
17 begin
18 LField := ADataset.Fields[i];
19 if LRecord = '' then
20 LRecord := '{"' + LField.FieldName + '":"' + LField.Text + '"'
21 else
22 LRecord := LRecord + ',"' + LField.FieldName + '":"' + LField.Text + '"';
23 if i = ADataset.FieldCount - 1 then
24 begin
25 LRecord := LRecord + '}';
26 if Result = '[' then
27 Result := Result + LRecord
28 else
29 Result := Result + ',' + LRecord;
30 LRecord := '';
31 end;
32 end;
33 ADataset.Next;
34 end;
35 ADataset.EnableControls;
36 Result := Result + ']';
37 
38 end;

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

 1 procedure JsonToDataSet(AJson: string; ADataset: TDataSet);
 2 var
 3 jDataSet: TJSONArray;
 4 jRecord: TJSONObject;
 5 i, j: Integer;
 6 begin
 7 if (AJson = '') or (ADataset = nil) or (not ADataset.Active) then
 8 Exit;
 9 jDataSet := TJSONObject.Create.ParseJSONValue(AJson, True) as TJSONArray;
10 while not ADataset.Eof do
11 ADataset.Delete;
12 for i := 0 to jDataSet.Size - 1 do
13 begin
14 ADataset.Append;
15 jRecord := jDataSet.Get(i) as TJSONObject;
16 for j := 0 to ADataset.FieldCount - 1 do
17 ADataset.Fields[j].Text := jRecord.GetValue(ADataset.Fields[j].FieldName).ToString;
18 ADataset.Post;
19 end;
20 end;

 

posted @ 2018-11-19 08:55  r00t_exp  阅读(535)  评论(0编辑  收藏  举报