DATASET与JSON互转

来源:互联网 发布:dijkstra算法c语言 编辑:程序博客网 时间:2024/06/15 11:02

一、DataSet转JSON

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


二、JSON转DataSet

[delphi] view plain copy
 print?
  1. //2)JSON字符串转换为数据集:  
  2.   
  3. procedure JsonToDataSet(AJson: string; ADataset: TDataSet);  
  4. var  
  5.   jDataSet: TJSONArray;  
  6.   jRecord: TJSONObject;  
  7.   i, j: Integer;  
  8. begin  
  9.   if (AJson = ''or (ADataset = nilor (not ADataset.Active) then  
  10.     Exit;  
  11.   jDataSet := TJSONObject.Create.ParseJSONValue(AJson, True) as TJSONArray;  
  12.   while not ADataset.Eof do  
  13.     ADataset.Delete;  
  14.   for i := 0 to jDataSet.Size - 1 do  
  15.   begin  
  16.     ADataset.Append;  
  17.     jRecord := jDataSet.Get(i) as TJSONObject;  
  18.     for j := 0 to ADataset.FieldCount - 1 do  
  19.       ADataset.Fields[j].Text := jRecord.GetValue(ADataset.Fields[j].FieldName).ToString;  
  20.     ADataset.Post;  
  21.   end;  
  22. end;