Icy's Blog

Hi, 请登录

Json 转换成 TFDMemTable

工作的时候(虽然我不喜欢弄这些玩意儿) 需要将返回过来的json数据 转到本地的DBGrid展示。

所以便搜罗了一下 ,使用 XSuperJSON 将数据转成内存表 使用 .

我们从请求返回的JSON数组对象 ISuperArray 转换到FDM中 然后连接到DataSet显示即可

下面给出的函数即鄙人粗糙的写的转换函数.

(*
 json 数据转换 内存表  
 icy
*)
function JsonToDataSet2(JAry: ISuperArray; MDB:  TFDMemTable):Boolean;
begin
  Result:= True;
  try
    JSONToDataSet(jAry,MDB);
    MDB.Post;
  except
    Result:= False;
  end;
end;

以上这个在内存表添加了字段后即可展示

下面给出自动生成字段的

(*
    内存表自动转换
    只认 整形和 字符串 浮点和日期的json一律以字符串展示
    icy
*)
function JsonToFDMDataSet(JAry: ISuperArray; MDB:  TFDMemTable):Boolean;
var
  JO:    ISuperObject;
  K:     string;
begin
  Result:= JAry.Length > 0;
  if Result then
  begin
    JO:= JAry.O[0];
    MDB.Close;
    if MDB.FieldDefs.Count > 0 then
      MDB.FieldDefs.Clear;
    while not JO.EoF do
    begin
      K:= JO.CurrentKey;

      if JO.CurrentValue.DataType = dtInteger then
         MDB.FieldDefs.Add(K, ftInteger, 0, False)
      else
      if JO.CurrentValue.DataType = dtFloat then
      MDB.FieldDefs.Add(K,ftFloat,0,False)
      else
      MDB.FieldDefs.Add(K, ftString, 30, False);

      JO.Next;
    end;

    MDB.CreateDataSet;
    JSONToDataSet(JAry,mdb);
    MDB.Post;

    MDB.First;
  end;
end;

还有给 DataSet转到 JARY的 差不多的 这里就不贴了应该用的不多。

记得引用单元

          XSuperJSON,
         XDataToJson,

         XSuperObject,

         FireDAC.Comp.Client;

相关推荐

评论

  • 昵称 (必填)
  • 邮箱
  • 网址