數據集和JSON相互轉換
使用DELPHI原生類實現數據集和JSON相互轉換
JSON二要素:數組和對象。對象可以包含數組,數組可以包含對象。無層數限制。OLEVARIANT也類似,OLEVARIANT的一個元素又可以是OLEVARIANT,且無層數限制。XML亦類似。這也是它們能序列一切對象的奧秒所在。JSON就是字符串,定義好序列後的字符串格式,甚至都不需要啥JSON類庫,就可以自行組裝JSON字符串和解析JSON字串獲取數據。
USES System.JSON
1)數據集轉換為JSON字符串:
function TForm1.DataSetToJson(ADataset: TDataSet): string;
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
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
Result := Result + ‘,‘ + LRecord;
LRecord := ‘‘;
end;
end;
ADataset.Next;
end;
ADataset.EnableControls;
Result := Result + ‘]‘;
end;
2)JSON字符串轉換為數據集:
procedure TForm1.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;
http://blog.csdn.net/zisongjia/article/details/72675886
數據集和JSON相互轉換