虽有将Clientdataset转换到JSON的经验,谢谢
解决方案 »
- 在主窗口中调用DLL中的窗口,回车无法使用。请大虾帮助。
- 用window服务启动另一程序问题.
- 急!!!真的没有人知道用DELPHI如何做出IUP数据文件?我昨天为此才开始接触DELPHI,很菜,诚恳大虾们帮帮忙~~
- 请问这条SQL语句怎么写?
- ■■■怎样创建一个唯一的ID?
- 请问如何去除IDE中调试时经常出现的异常错误提示
- ==Delphi6和Oracle8.1.7的Date字段的问题?===
- 我是一个delphi新手,请各位指点一下
- 如何在delphi达到ACDSee那样的图片浏览速度?
- DateTimePicker中的日期时间的设置
- 哪能找到transparentbutton这个控件
- 谁有在delphi7里确定可用的spcomm控件,给小妹传一个吧
搞个循环,不就玩了?
var
Json: TlkJSONobject;
ChildJson: TlkJSONobject;
i: integer;
begin
Json := TlkJSONobject.Create;
ClientDataSet1.First;
while not ClientDataSet1.Eof do
begin
ChildJson := TlkJSONobject.Create;
for i := 0 to ClientDataSet1.FieldCount - 1 do
ChildJson.Add(ClientDataSet1.Fields[i].FieldName,ClientDataSet1.Fields[i].AsString);
Json.Add(IntToStr(Json.Count),ChildJson);
ClientDataSet1.Next;
end;
TlkJSONstreamed.SaveToFile(Json,'C:\1.txt');
Json.Free;
2、这种效率怎么样呢?
另外我需要将转换后的结果通过webservice传输到客户端,那么需要怎么序列化json结果?谢谢
没有保存结构,下面我给你两个完整的函数吧?
procedure ClientDataSetToJson(ClientDataSet: TClientDataSet;JsoFile: String);
var
Json: TlkJSONobject;
ChildJson,FieldJson: TlkJSONobject;
i: integer;
begin
Json := TlkJSONobject.Create;
FieldJson := TlkJSONobject.Create;
ClientDataSet.First;
for i := 0 to ClientDataSet.FieldCount - 1 do
begin
ChildJson := TlkJSONobject.Create;
ChildJson.Add('FieldName',ClientDataSet.Fields[i].FieldName);
ChildJson.Add('FieldType',Integer(ClientDataSet.Fields[i].DataType));
ChildJson.Add('FieldSize',ClientDataSet.Fields[i].Size);
FieldJson.Add(IntToStr(i),ChildJson);
end;
Json.Add('TableName',FieldJson);
while not ClientDataSet.Eof do
begin
ChildJson := TlkJSONobject.Create;
for i := 0 to ClientDataSet.FieldCount - 1 do
ChildJson.Add(ClientDataSet.Fields[i].FieldName,ClientDataSet.Fields[i].AsString);
Json.Add(IntToStr(Json.Count),ChildJson);
ClientDataSet.Next;
end;
TlkJSONstreamed.SaveToFile(Json,JsoFile);
Json.Free;
end;procedure JsoToClientDataSet(JsoFIle: string;ClientdataSet: TClientDataSet);
var
Json: TlkJSONobject;
ChildJson,FieldJson: TlkJSONobject;
i,j: integer;
begin
Json := TlkJSONstreamed.LoadFromFile(JsoFIle) as TlkJSONobject;
FieldJson := (Json.Field['TableName']) as TlkJSONobject;
ClientdataSet.Close;
ClientdataSet.FieldDefs.Clear;
for i := 0 to FieldJson.Count - 1 do
begin
ChildJson := FieldJson.field[inttostr(i)] as TlkJSONobject;
ClientdataSet.FieldDefs.Add(ChildJson.getString('FieldName'),TFieldType(ChildJson.getInt('FieldType')),ChildJson.getInt('FieldSize'));
end;
if ClientdataSet.FieldDefs.Count = 0 then
Exit;
ClientdataSet.CreateDataSet;
for i := 1 to Json.Count - 1 do
begin
ChildJson := Json.Field[IntToStr(i)] as TlkJSONobject;
ClientdataSet.Append;
for j := 0 to ChildJson.Count - 1 do
begin
ClientdataSet.Fields[j].AsString := ChildJson.getString(j)
end;
ClientdataSet.Post;
end;
Json.Free;
end;
因为没有试验过,而且,我也是最近几天才知道原来有JSON这个东西,看到你发的这个问题,我才第一次写了一个关于JSON的例子,呵呵,摸索中。
用的是2009自带的json.pas,
希望多交流