DataSetToJSON
unit FMX.DataSetToJSON; interface
uses
FireDAC.Comp.Client,Data.DB; function DataSetToJSON(DataSet:TDataSet):String;
function JSONToDataSet(JSONTEXT:String):TFDMemTable; implementation
uses System.Rtti,System.JSON; function DataSetToJSON(DataSet:TDataSet):String;
var
I:integer;
JSONObject,FieldJSONObject:TJSONObject;
JSONArray:TJSONArray;
begin
Result:='';
JSONObject:=TJSONObject.ParseJSONValue('{}') as TJSONObject;
try
JSONObject.AddPair('Fields',TJSONArray.Create);
JSONArray:=JSONObject.GetValue('Fields') as TJSONArray;
for I := to DataSet.FieldDefs.Count - do
begin
FieldJSONObject:=TJSONObject.Create ;
FieldJSONObject.AddPair ('FieldName',DataSet.FieldDefs[i].Name );
FieldJSONObject.AddPair('DataType',TRttiEnumerationType.GetName<TFieldType>(DataSet.FieldDefs[i].DataType));
FieldJSONObject.AddPair('DataSize',TJSONNumber.Create(DataSet.FieldDefs[i].Size));
JSONArray.Add(FieldJSONObject) ;
end;
DataSet.First ;
JSONObject.AddPair('DATAS',TJSONArray.Create);
JSONArray:=JSONObject.GetValue('DATAS') as TJSONArray;
while not DataSet.Eof do
begin
FieldJSONObject:=TJSONObject.Create ;
for I := to DataSet.FieldDefs.Count - do
FieldJSONObject.AddPair(DataSet.FieldDefs[i].Name,DataSet.Fields[i].AsString);
JSONArray.Add(FieldJSONObject) ;
DataSet.Next ;
end;
Result := JSONObject.ToJSON ;
finally
JSONObject.Free ;
end;
end; function JSONToDataSet(JSONTEXT:String):TFDMemTable;
var
I,R:integer;
JSONObject,FieldJSONObject:TJSONObject;
JSONArray:TJSONArray;
DataName,DataType:String;
FieldType:TFieldType;
FieldSize:integer;
begin
Result:=TFDMemTable.Create(nil);
if JSONTEXT='' then Exit;
JSONObject:=TJSONObject.ParseJSONValue(JSONTEXT) as TJSONObject;
try
JSONArray:=JSONObject.GetValue('Fields') as TJSONArray;
for I := to JSONArray.size - do
begin
Result.FieldDefs.Add(((JSONArray.Get(i) as TJSONObject).GetValue('FieldName') as TJSONString).Value,
TRttiEnumerationType.GetValue<TFieldType>(((JSONArray.Get(i) as TJSONObject).GetValue('DataType') as TJSONString).Value),
((JSONArray.Get(i) as TJSONObject).GetValue('DataSize') as TJSONNumber).AsInt64);
end;
Result.CreateDataSet ;
JSONArray:=JSONObject.GetValue('DATAS') as TJSONArray;
for I := to JSONArray.size - do
begin
Result.Append ;
for R := to Result.FieldDefs.Count - do
begin
FieldJSONObject:=(JSONArray.Get(i) as TJSONObject);
if FieldJSONObject=nil then continue; try
Result.FieldByName(Result.FieldDefs[R].Name).Value :=
(FieldJSONObject.GetValue(Result.FieldDefs[R].Name) as TJSONString).Value ; Except
end;
end;
Result.Post ;
end;
finally
JSONObject.Free ;
end;
end;
end.
DataSetToJSON的更多相关文章
- DataSetToJson 扩展方法
001 using System; 002 using System.Collections.Generic; 003 using System.Linq; 004 using System.Text ...
- JSON和数据集互相转换单元
如题......只是一个单元, 为了测试JSON单元性能的... 具体测试结果参考: http://www.cnblogs.com/hs-kill/p/3668052.html 代码中用到的Seven ...
- EasyUi – 6.easyui常见问题
1.进度条 2.JQuery EasyUI弹出对话框解决Asp.net服务器控件无法执行后台代码的方法 3. 三张表的连接查询现在到datagrid里 4.日期组合框DateBox设置readonly ...
- EasyUi – 4.datagrid
测试的时候用Json来测试就好啦. <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> ...
- mormot 数据集转换为JSON字串
mormot 数据集转换为JSON字串 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graph ...
- C#中Json和List/DataSet相互转换
#region List<T> 转 Json /// <summary> /// List<T> 转 Json /// & ...
- ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码
实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...
- .NET DataTable转化为json格式
标准的json用“分隔,不用' public static string DataSetToJson(DataTable dt) { string json = string.Empty ...
- Ajax+存储过程真分页实例解析(10W数据毫秒级+项目解析)
周末闲来无事,突然想写个分页的东西玩玩,说走就走 在文章最后我会把整个项目+数据库附上,下载下来直接运行就可以看效果了.整个项目采用的是简单三层模式,开发平开是VS2010+SQL2012 一.我要做 ...
随机推荐
- HDU 2222 Keywords Search(AC自动机模板题)
http://acm.hdu.edu.cn/showproblem.php?pid=2222 题意:给出多个单词,最后再给出一个模式串,求在该模式串中包含了多少个单词. 思路: AC自动机的模板题. ...
- 安装 mysql8.0.13 (Ubuntu 16.04 desktop amd64)
1.下载mysql deb https://dev.mysql.com/downloads/mysql/ #移动到/usr/local/src/目录,解压 sudo mv mysql-server_8 ...
- python3.7 安装pyqt5
pip install pyqt5
- Springboot 学习遇到的一些错和埋坑之旅
1. java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @Cont ...
- zlib__ZC
官网:http://www.zlib.net/ ,所有版本下载:http://www.zlib.net/fossils/ ZC: 我下载的是 zlib-1.2.3.tar.gz 和 zlib-1.2. ...
- English trip -- VC(情景课)5 Around Town
Around Town 城市周围 Talk about the picture 看图说话 sentences Where are you? I'm in the Meten classroom. ...
- 用Rails.5.2+ Vue.js做 vue-todolist app
Rails5.2+Vue.js完成Lists(curd) 注意: Edit/update使用SPA(single-page Application单页面程序)的方法完成.点击文字出现一个输入框和按钮. ...
- 5-13 Rspec实际; validates处理Errors, TDD, 单元测试和验收测试,capybara
validates处理验证错误:详见ActiveModel::Errors文档 一,errors ActiveModel::Errors的实例包含所有的❌.每个错误:key是每个属性的name, va ...
- Trailing Loves (or L'oeufs?) CodeForces - 1114C (数论)
大意: 求n!在b进制下末尾0的个数 等价于求n!中有多少因子b, 素数分解一下, 再对求出所有素数的最小因子数就好了 ll n, b; vector<pli> A, res; void ...
- csp公共钥匙盒
1.公共钥匙盒 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥 ...