数据集和JSON相互转换

摘要:
TDataSet):整数;=LRecord+“}”;ifResult='['thenResult:Result:=Result+']';TDataSet);beginif(AJson='')或(ADataset=nil)或(notADataset.Active),然后退出;True)作为TJSONArray;fori:

使用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;

免责声明:文章转载自《数据集和JSON相互转换》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JedisPool无法获得资源问题Typora之更换自己喜欢的换主题【带图操作详细步骤】下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#使用SqlDataAdapter 实现数据的批量插入和更新

近日由于项目要求在需要实现中型数据的批量插入和更新,晚上无聊,在网上看到看到这样的一个实现方法,特摘抄过来,以便以后可能用到参考。 一.数据的插入 DateTime begin = DateTime.Now; string connectionString = ......; using(SqlConnection conn = new SqlConnec...

JavaSE之Long 详解 Long的方法简介以及用法

基本功能 Long 类在对象中包装了基本类型 long 的值 每个 Long 类型的对象都包含一个 long 类型的字段 static long MAX_VALUE long 8个字节最大值2^63-1十六进制:  0x8000000000000000L static long MIN_VALUE 最小值-2^63十六进制...

(转)大型分布式网站架构技术总结

本文是学习大型分布式网站架构的技术总结。对架构一个高性能,高可用,可伸缩,可扩展的分布式网站进行了概要性描述,并给出一个架构参考。一部分为读书笔记,一部分是个人经验总结。对大型分布式网站架构有很好的参考价值。   本次分享大纲如下 大型网站的特点 大型网站架构目标 大型网站架构模式 高性能架构 高可用架构 可伸缩架构 可扩展架构 安全架构 敏捷架构 大型架...

vue(初探预渲染)

---恢复内容开始---  一、前言                                                                                                     1、简介预渲染                     2、案例演示(不配置预渲染)                  ...

Mysql学习总结(36)——Mysql查询优化

从事前端开发的都知道,页面显示的数据一定要及时的呈现,否则会影响用户体现.那么导致页面加载数据慢或者显示滞后的原因又是什么呢? 拿自己之前做项目经历给大家讲讲吧,之前做后台,当时的项目实时性都非常高,前端页面实时显示要求非常高 ,慢1秒显示都会导致用户的投诉,最后没办法,通过本地(磁盘)缓存跟数据表分割来解决这一问题. 原因分析 主要原因1: 后台数据库中...

arcgispro字段计算器

使用python语法 在python中没有类似sub()或者subString()的方法,但是字符串的截取操作却是更加简单。 只需要把字符串看作是一个字符数组,截取子串非常方便。 多余的话就不啰嗦了,看下面的例子就明白了。 str = ’0123456789′print str[0:3] #截取第一位到第三位的字符print str[:] #截取字符串的全...