我试图将我的Sqlite查询的结果转换为JSON,以使用与我通过PHP远程绑定到SQL Server相同的过程。
代码工作,但你认为这是一个更好的解决方案?
有人这样做吗?
function TLogin.RetornaRegistros(query:String): String;
var
FDQuery : TFDQuery;
field_name,nomeDaColuna,valorDaColuna : String;
I: Integer;
begin
FDQuery := TFDQuery.Create(nil);
try
FDQuery.Connection := FDConnection1;
FDQuery.SQL.Text := query;
FDQuery.Active := True;
FDQuery.First;
result := '[';
while (not FDQuery.EOF) do
begin
result := result+'{';
for I := 0 to FDQuery.FieldDefs.Count-1 do
begin
nomeDaColuna := FDQuery.FieldDefs[I].Name;
valorDaColuna := FDQuery.FieldByName(nomeDaColuna).AsString;
result := result+'"'+nomeDaColuna+'":"'+valorDaColuna+'",';
end;
Delete(result, Length(Result), 1);
result := result+'},';
FDQuery.Next;
end;
FDQuery.Refresh;
Delete(result, Length(Result), 1);
result := result+']';
finally
FDQuery.Free;
end;
end;
字符串
6条答案
按热度按时间zengzsys1#
这不是一个好办法。我真的建议考虑至少三个选择:
1.使用System.JSON单元的强大功能。
个字符
1.第二种方法,使用
FDMemTable.SaveToStream
; * 同样适用于FDMemTable.SaveToFile
;* 将TFDMemTable放在数据表(或表单)上。型
现在您可以阅读
JSON
内容例如,下面的答案Converting TMemoryStream to 'String' in Delphi 2009
型
json是String
1.该
BatchMove
由@ davaMarotoSilva发布你可以使用
BatchMove
组件,它提供了一个在数据集之间移动数据的接口,但是当你想以驱动器、XML或JSON格式保存数据时,它更适合备份和导入。我还没有找到在内存中使用数据移动的例子;如果有人有例子,请评论。备注
1.使用FdMemTable时,不要忘记拖动TFDStanleyJSONLink组件进行数据Map
1.方法。Data只适用于FiredacDatasets(前缀为FD的Datasets)。要为旧Datasets中的memTable分配数据,请使用方法.Copydata。
1.抱歉,我将
.Data
更改为.CloneCursor
,以便与两个数据集共享相同的内存空间。sy5wg1nm2#
我只是修改了我下面的第一个答案,以comport不同类型的字段转换为适当的json格式的数字,日期和布尔值。我注解了我没有测试的类型。看
使用{...} System.JSON;
关于数据集的更多信息。DataType http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/DB_TFieldType.html
更多关于JSONTypes https://community.embarcadero.com/blogs/entry/json-types-for-server-methods-in-datasnap-2010-4
fnx2tebb3#
考虑使用TFDBatchMove组件。它用于在两个数据库之间直接传输数据,并支持额外的Map。作为源和目标,可以是文本,数据集或对任何FireDAC支持的数据库引擎的SQL查询。
cngwdvgl4#
Delphi MVC Framework包含一个强大的Map器,可以将jsonMap到对象,将数据集Map到对象。Mapper是一个子项目。它是独立的代码,也可以用于其他类型的项目。它是开源的!
优点是布尔值,例如,被转换为TJSONBool类型,而不是字符串。我建议看看示例。
https://github.com/danieleteti/delphimvcframework/tree/master/samples/objectsmapperssamples的
rdrgkggo5#
这可能不是最好的解决方案,你可以修改它来格式化JSON.这里有一个快速的示例解决方案:
字符串
xqkwcwgp6#
我喜欢它的简单性,有了JsonDataObjects的强大功能,我们可能会得到JsonObject的结果。
使用.. JsonDataObjects,
字符串