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 := 0 to DataSet.FieldDefs.Count   -1 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 := 0 to DataSet.FieldDefs.Count   -1 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 := 0 to JSONArray.size  -1 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 := 0 to JSONArray.size  -1 do
              begin
                  Result.Append ;
                  for R := 0 to Result.FieldDefs.Count -1  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.
---------------------
作者:modecat
来源:CSDN
原文:https://blog.csdn.net/Modecat/article/details/52026243
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值