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 一.我要做 ...
随机推荐
- js分号的重要性
js中语句末尾可以不加分号, 很多时候在做练习或写几个页面时,我都是不会加的.虽然知道加了会好一点.但就是觉得很敲一句就要多按一次分号键(;)来加分号,而不加也不怎么样,然后就不想加了. 也听说在对j ...
- 下列java代码中的变量a、b、c分别在内存的______存储区存放。
class A{ private String a = "aa"; public boolean methodB(){ String b = "sb"; fin ...
- cartographer安装--Ubuntu14.04--indigo
0.安装所有依赖项 sudo apt-get install -y google-mock libboost-all-dev libeigen3-dev libgflags-dev libgoogl ...
- 使用rviz 查看远程主机
一.安装好ros环境 https://www.cnblogs.com/sea-stream/p/9809590.html 二.配置参数 vim ~/.bashrc #输入内容 export ROS_H ...
- Spring AMQP 源码分析 03 - MessageConverter
### 准备 ## 目标 了解 Spring AMQP 消息转化实现 ## 相关资源 Quick Tour for the impatient:<http://docs.spring.io/ ...
- 简明Docker教程
Docker基础 这篇基础文章是方便用户在使用cSphere平台之前,了解docker基础知识. 针对已经有一定的Linux基础知识的用户. Docker是什么 Docker是一个改进的容器技术.具体 ...
- CentOS系统-常用组件安装
1,安装系统后,补装包组yum groupinstall "Compatibility libraries" "Base" "Development ...
- HTTP请求GET/POST查看工具
当你有一个http的get请求需要知道结果,可以直接在浏览器上输入,然后等待查看结果. 那如果是一个post请求呢?推荐使用一个国外工具Send HTTP Tool. 传送门:http:/ ...
- Jquery实现光棒效果
<script type="text/javascript"> $(function () { var $bac; $("#d1 tr").hove ...
- poj1651 Multiplication Puzzle
比较特别的区间dp.小的区间转移大的区间时,也要枚举断点.不过和普通的区间dp比,断点有特殊意义.表示断点是区间最后取走的点.而且一个区间表示两端都不取走时中间取走的最小花费. #include &l ...