//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;