博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据集和JSON相互转换
阅读量:5826 次
发布时间:2019-06-18

本文共 1671 字,大约阅读时间需要 5 分钟。

使用DELPHI原生类实现数据集和JSON相互转换

 JSON二要素:数组和对象。对象可以包含数组,数组可以包含对象。无层数限制。OLEVARIANT也类似,OLEVARIANT的一个元素又可以是OLEVARIANT,且无层数限制。XML亦类似。这也是它们能序列一切对象的奥秒所在。
JSON就是字符串,定义好序列后的字符串格式,甚至都不需要啥JSON类库,就可以自行组装JSON字符串和解析JSON字串获取数据。

USES System.JSON

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

function TForm1.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;

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://sksdx.baihongyu.com/

你可能感兴趣的文章
Liunx虚拟机上网
查看>>
写脚本遇到的问题(一)
查看>>
我的友情链接
查看>>
ALI OSS RequestTimeTooSkewed
查看>>
MySQL 删除数据表
查看>>
EOF 函数
查看>>
mysql手记
查看>>
Nginx之开门见山
查看>>
Dalvik在x86下的编译及调试
查看>>
Linux DNS (bind) 从(辅)服务器配置
查看>>
Mac查看附近WiFi信道及路由器信道的选
查看>>
apache rewrite跳转多斜线问题(答网友)
查看>>
【HA】开源版HeartBeat + DRBD(分布式存储)+MySql
查看>>
Linux系统小工具使用大用途---2
查看>>
我的友情链接
查看>>
Dictionary 检测key是否存在
查看>>
cengos6.3安装Intel Advanced-N 6205无线驱动
查看>>
Elasticsearch 6.5 实现冷热数据分离
查看>>
简单化:win7自带wifi win7无线网络共享设置图文方法(网上的,比较细)
查看>>
研究高并发量的SQL语句如何去优化
查看>>