我是Delphi的新手,我正在做一个关于如何通过delphi输出JSON数组的实验。对任何人来说这听起来都很简单但我不知道怎么做。我已经创建了一个简单的程序。
现在,我想要做的是创建一个命令/请求,其参数如下:
http://localhost:8001/hello?json={"names":["Jay","Chris","John"]}
会在浏览器中创建一个结果,如下所示:
{
result: ["Hello Jay","Hello Chris","Hello John"],
id: "",
time_elapsed: 0
}
拜托,我真的需要帮助。任何人
修改: 这是我今天刚刚做的代码,但它仍然没有显示我想要的输出:
procedure TPrimeJSONMHelloPeople.ProcessJSONRPCRequest(
var ResultValue: TlkJSONbase; var ResultSuccess: Boolean);
var
jsonPeople:TlkJSONlist;
dmPool:TObject;
dm:TPrimeDataModuleBaseDM;
i:integer;
begin
FjsonObj1 := TlkJSONobject.Create;
jsonPeople := FjsonObj1.CreateListValue('names');
jsonPeople.AddVarString('jay');
jsonPeople.AddVarString('ann');
jsonPeople.AddVarString('john');
inherited;
CheckRequiredParameter('names');
PrimeDataModuleWebService.TDataModuleDMCreateInstanceDefault(dmPool);
try
dm := TPrimeDataModuleDefaultDM(dmPool).GetModule;
try
//this part here will loop and output the name
//if jsonPeople <> nil then
if Params.Field['names'] <> nil then
begin
for i := 0 to FjsonObj1.Field['names'].Count - 1 do
begin
ResultValue := TlkJSONlist.Create
end;
end;
ResultValue := TlkJSONlist.Create;
finally
dm.Release;
end;
finally
dmPool.Free;
end;
FjsonObj1.Free;
ResultSuccess := True;
end;
我不知道代码中缺少什么,它只显示: {
result: [ ],
id: "",
time_elapsed: 0
}
而不是:
{
result: ["Hello Jay","Hello Chris","Hello John"],
id: "",
time_elapsed: 0
}
答案 0 :(得分:1)
procedure TSample1.ProcessJSONRPCRequest(
var ResultValue: TlkJSONbase; var ResultSuccess: Boolean);
var
dmPool:TObject;
dm:TPrimeDataModuleBaseDM;
jsonPeople:TlkJSONlist; //used Tlkjsonlist since I want to create an array
i:integer;
begin
inherited;
jsonPeople:=TlkJSONlist.Create; //create jsonPeople as an array
CheckRequiredParameter('names'); //names parameter needed
PrimeDataModuleWebService.TDataModuleDMCreateInstanceDefault(dmPool);
try
dm := TPrimeDataModuleDefaultDM(dmPool).GetModule;
try
if Params.Field['names'] <> nil then //check if the names parameter is empty
begin
ResultValue:=jsonPeople;
for i := 0 to Params.Field['names'].Count - 1 do
begin
jsonPeople.AddVarString('hello ' + Params.Field['names'].Child[i].value);
end;
end;
finally
dm.Release;
end;
finally
dmPool.Free;
end;
ResultSuccess := True;
end;
end.
请求为http://localhost/sample1?json={"names":["john","jay"]}
输出是
{
-
result: [
"hello john"
"hello jay"
]
id: ""
time_elapsed: 0
}
希望这可以帮助那些使用delphi创建Web服务请求的新手。
答案 1 :(得分:0)
首先,我认为您问题中显示的URI已经解码。您应该在HTTP协议中对URI参数进行编码。
如果要创建此类面向HTTP的JSON访问,请查看RESTful approach。它可以帮助你不重新发明井,并能够使你的服务器更准备好AJAX。
然后您似乎使用了third-party lkJSON Delphi library ...所以您可以直接从其作者或支持论坛获得帮助。
从库的源代码中,您应该使用TlkJSONlist
实例来处理来自URI输入和结果输出的JSON数组。